« Perso je parse les headers http à la recherche d'un encodage, sinon cherche dans la page. Si je trouve l'encodage, je l'utilise pour décoder la page et récupérer le title.
Si pas d'encodage, je prends UTF-8 en fallback. »
SebSauvage le fait déjà. Ce n'est pas le problème, juste que sur certains sites web on a — pour « - » en dur dans le title de la page.
« Pour les caractères dangereux, un htmlspecialchars() suffit : il ne touche pas aux entités HTML. »
Perdu, ça ne fonctionne pas sur les exemples que j'ai donné plus haut :
php -r "echo htmlspecialchars_decode('Internet est bâti sur un marécage');"
Internet est bâti sur un marécage
php -r "echo html_entity_decode('Internet est bâti sur un marécage');"
Internet est bâti sur un marécage