Encodage utf-8 PHP/mySQL
Par ryuran le samedi, 6 mai 2006, 16:33 - Informatique - Lien permanent
Je ne dois pas l'avoir dit encore sur mon blog mais je suis en plein développement d'un petit CMS en php. Sa particularité est d'être extensible, multilingue et surtout il peut aussi bien servir pour un gros portail que pour un petit site. Bien sûr tout ça dans le respect des standards.
En fait si j'écris cet article c'est pour vous raconter les problèmes que j'ai rencontré au niveau de l'encodage utf-8 pour ce CMS. Aussi bien au niveau du php et de la base de donnée mySQL.
Au début, on avait simplement tout mis en iso-8859-1. Le CMS marchait correctement mais on s'est dit que si on a besoin de rendre le CMS multilingue on va avoir des problèmes à cause de cet encodage. Donc on a décidé de passer à l'utf-8. Donc on fait des recherches et on se rencontre qu'il ne suffit pas de faire passer tout l'affichage de php dans la fonction utf8_encode() et de mettre dans le html <meta http-equiv="content-Type" content="text/html; charset=utf-8" />. Ce serait si simple si ça suffisait.
Ensuite on a des problèmes avec la base de donnée car la bdd reçoit du utf-8 par les formulaires (à cause de l'encodage de la page) et l'enregistre comme de l'iso-8859-1 puis quand php récupère ça et le met en utf-8 avec utf8_encode() ça nous donne de jolis points d'interrogation. on a essayé utf8_decode sur tout ce qui sort de la bdd mais là aussi on a un problème, cette fonction ne marche pas correctement. On s'est dit que c'était peut-être dû à l'encodage de la base de donnée et de son inter-classement donc on a passé toute la base de donnée en utf-8 ce qui n'a pas vraiment été simple.
Le résultat a été le même donc on a voulu passer tout le code php en utf-8. Avec notepad++ ce n'était pas trop dur mais on a préféré passer à pspad qui est un peu diffèrent dans son utilisation mais très pratique pour le php. On a donc enlevé cette fichue fonction utf8_encode() et tous nos fichiers ont été mis en utf-8. On a bien sûr été informé du problème de traitement de chaîne de caractères en php et sql dû à ce changement d'encodage mais nous n'avons pas vraiment besoin de traiter des chaînes de caractères qui comportent autre chose que des caractères d'ASCII de base comme les url.
Finalement ça marche correctement mais il y a un problème avec phpmyadmin. Quand on modifie des données via l'interface de phpmyadmin, avec les formulaires habituels, il encode le résultat dans la bdd en iso-8859-1 ce qui est un peu embêtant car on se retrouve encore avec des points d'interrogations sur notre page. Je cherche un autre système de gestion de base de donnée qui n'a pas ce problème mais je n'ai encore rien trouvé.

Commentaires
Salut,
J'ai exactement le meme probleme avec Phpmyadmin qui n'a pas l'air de vouloir gerer utf-8 correctement. Si tu as trouver quelque chose entre temps fait moi signe. Merci!
++
Damien
J'ai également le même problème, les tables de ma base de données sont inter-classement utf8-bin, mes pages php et html comportent respectivement les entêtes header('Content-Type: text/html; charset=utf-8') et <meta http-equiv="content-type" content="text/html; charset=utf-8" /> et lorsque je veux insérer des valeurs directement depuis phpMyAdmin, il n'encode pas en utf8.
Merci pour votre aide car c'est très problèmatique.
Bonjour,
Après avoir fait le tour de plusieurs forum, j'ai trouvé la solution à notre problème à l'adresse suivante : www.developpez.net/forums...
Bonne continuation !
Pour résoudre le problème j'ai du remplir toute ma base de donné via php. enfin on avais finis par avoir quelque-chose d'utilisable en prenant beaucoup de temps.
La solution de www.developpez.net/forums... est très satisfaisante et surement bien plus rapide.