Problème: UTF-8 // PHP // phpmyadmin
Résolu/Fermé2 réponses
Comme je l'explique dans un article (voir lien ci dessous) le SET NAMES permet de prévenir le SGBD (MySQL dans ce cas là) que les interactions se feront avec tel ou tel encodage.
Pour rétablir une cohérence de données dans vos tables il faut faire deux requêtes (c'est une petite astuce, voir l'article ci-dessous).
http://www.aquatz.com/Encodage-convertir-un-site-en-UTF8-PHP-MySQL_a36.html
Enfin n'hésitez pas à utiliser mb_detect_encoding en PHP pour savoir quel est l'encodage d'une chaîne de caractères.
Pour rétablir une cohérence de données dans vos tables il faut faire deux requêtes (c'est une petite astuce, voir l'article ci-dessous).
http://www.aquatz.com/Encodage-convertir-un-site-en-UTF8-PHP-MySQL_a36.html
Enfin n'hésitez pas à utiliser mb_detect_encoding en PHP pour savoir quel est l'encodage d'une chaîne de caractères.
Utilisateur anonyme
20 juin 2008 à 22:07
20 juin 2008 à 22:07
Tu peux essayer dans un premier temps de forcer la conversion à utf-8 avant de stocker les données la bdd avec utf8_encode. Mais le problème est ailleurs.
J'ai essayer un utf8_encode sur les données avant de les rentrer dans la BDD, mais là l'affichage était mauvais dans les 2 cas...
En faisant un utf8_decode avant de les envoyer dans la BDD, et un utf8_encode avant d'afficher dans ma page PHP, tout est correct... Les é sont des é dans mes PHP, et dans phpmyadmin....
Mais comme tu dis, le problème est ailleurs, car c'est un peu stupide de décoder et ré-encoder TOUTES les données... Quelqu'un a une idée du pourquoi phpmyadmin fait le bordel avec les caractères spéciaux...???
En faisant un utf8_decode avant de les envoyer dans la BDD, et un utf8_encode avant d'afficher dans ma page PHP, tout est correct... Les é sont des é dans mes PHP, et dans phpmyadmin....
Mais comme tu dis, le problème est ailleurs, car c'est un peu stupide de décoder et ré-encoder TOUTES les données... Quelqu'un a une idée du pourquoi phpmyadmin fait le bordel avec les caractères spéciaux...???
"En faisant un utf8_decode avant de les envoyer dans la BDD, et un utf8_encode avant d'afficher dans ma page PHP, tout est correct... Les é sont des é dans mes PHP, et dans phpmyadmin...."
C'est donc que ton encodage dans les colonnes mysql est incorrect, parce que si tu nourris ta bdd avec des caractères issus de utf8_decode, ils sont en ansi, et justement si tu dis que marche, y'a un truc qui cloche :o
Essaie de modifier l'encodage dans ta bdd, voire de passer en latin...
C'est donc que ton encodage dans les colonnes mysql est incorrect, parce que si tu nourris ta bdd avec des caractères issus de utf8_decode, ils sont en ansi, et justement si tu dis que marche, y'a un truc qui cloche :o
Essaie de modifier l'encodage dans ta bdd, voire de passer en latin...
C'est ça, mon phpmyadmin déconne...!
Un "é" encodé UTF-8 lu par un qqc ANSI donne "é", ce qui est le cas de mon phpmyadmin.
Si je lui décode mes "é", la il comprend, ce qui prouve qu'il "lit" en ANSI...
Pourtant, cette colonne est en utf8_general_ci.
La table est en utf8_general_ci.
Dans phpmyadmin, je vois: MySQL charset: UTF-8 Unicode (utf8)
Et ceci: MySQL connection collation: utf8_unicode_ci
ATTENTION: pendant que j'écrivais ce message, j'ai lu un autre info ailleurs et j'ai essayer... Et ça fonctionne: la commande est la suivante: mysql_query("SET NAMES 'utf8'");
Je mets ça juste après mon mysql_select_db($dbname); et ça semble fonctionner... Pourquoi, je suis pas sûr étant donné que toutes mes tables et colonne sont en utf8... Mais bon, si ça à l'air de fonctionner...
Merci pour ton aide, juste le fait d'avoir qqn avec qui se renvoyer les idées aide beaucoup...
Un "é" encodé UTF-8 lu par un qqc ANSI donne "é", ce qui est le cas de mon phpmyadmin.
Si je lui décode mes "é", la il comprend, ce qui prouve qu'il "lit" en ANSI...
Pourtant, cette colonne est en utf8_general_ci.
La table est en utf8_general_ci.
Dans phpmyadmin, je vois: MySQL charset: UTF-8 Unicode (utf8)
Et ceci: MySQL connection collation: utf8_unicode_ci
ATTENTION: pendant que j'écrivais ce message, j'ai lu un autre info ailleurs et j'ai essayer... Et ça fonctionne: la commande est la suivante: mysql_query("SET NAMES 'utf8'");
Je mets ça juste après mon mysql_select_db($dbname); et ça semble fonctionner... Pourquoi, je suis pas sûr étant donné que toutes mes tables et colonne sont en utf8... Mais bon, si ça à l'air de fonctionner...
Merci pour ton aide, juste le fait d'avoir qqn avec qui se renvoyer les idées aide beaucoup...
26 janv. 2009 à 12:47
j'ai ajouté dans le fichier php qui extrayait les données l mysql_query("SET NAMES 'utf8'"); et là ça marche!
Pourquoi???????
j'ai pourtant exécuté la requête set names ....
si qqun sait...........