Version complète: sur le forum Webmaster Hub : Conversion jeux de caractères
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
captain_torche
Je suis en train de travailler sur un petit crawler, et je bute contre un ecueil : je récupère bien le code des pages, mais si celles-ci comportent des accents, ceux-ci se trouvent parfois transformés en points d'interrogation.
Comment faire pour convertir la chaîne que je récupère en ISO ?

J'ai bien essayé la méthode trouvée ici (http://www.phpcs.com/codes/CONVERTIR-CHAIN...8859_40867.aspx), mais elle semble ne pas fonctionner dans mon cas (le souci est-il bien dû à l'UTF-8, d'ailleurs ?).
Jeanluc
Toutes les pages n'ont pas le même encodage. Il faut d'abord déterminer l'encodage utilisé dans la page que tu analyses. Soit tu essaies de deviner le type d'encodage en examinant le texte de la page, soit tu te bases sur l'en-tête HTTP et la META "Content-Type".

Une fois que cela est fait, il existe des fonctions PHP pour convertir l'UTF-8 en ISO ou inversement (comme expliqué dans l'article que tu cites).

Jean-Luc
captain_torche
Le souci, c'est quand je fais un "transcodage" inconditionnel (je passe tout à la moulinette utf8_decode() pour tester), ces points d'interrogation subsistent. C'est pour ça que je me demandais si le problème venait bien de l'UTF8 ou d'autre chose.
Dudu
Salut captain_torche wink.gif
CITATION(captain_torche @ lundi 10 septembre 2007 à 23:02) *
je passe tout à la moulinette utf8_decode() pour tester
Le problème vient vraisemblablement de là smile.gif
Vincent parle de cette fonction dans un billet de son blog intitulé PHP, MySQL, et UTF-8 sont sur un bateau en ces termes:

CITATION
Oui mais en fait, ce n'est pas si simple, car la fonction utf8_decode() est destructrice, c’est à dire que les caractères dans la chaîne qui n’ont pas d’équivalent en latin1 seront remplacés par un point d’interrogation.


Les points d'interrogation que tu récupères sont-ils effectivement, dans les pages crawlées, des caractères qui n'existent pas en ISO-8859-1 (Latin-1) ?
Si oui, tu as ta réponse.

Quoiqu'il en soit, vérifier l'encodage via l'en-tête HTTP me semble primordial comme le dit Jeanluc.

Bon courage.
captain_torche
Merci pour l'info, je vais tenter une autre approche : tout mettre en UTF-8 par défaut.

Edit : Bon, dans ce sens ça fonctionne à merveille. Vive l'UTF-8 !
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.