Problème: UTF-8 // PHP // phpmyadmin

Résolu/Fermé
pierre - 20 juin 2008 à 21:41
 Coul Anges - 29 janv. 2014 à 17:26
Bonjour, alors ça fait 8 heures que je cherche uns solution, voici le problème:

J'ai des pages PHP qui envoi des données entrées par l'utilisateur vers un BD MySQL. Ces données sont ensuite affichées sur différentes pages PHP.

Tous les fichiers PHP sont en UTF-8, avec le META et Content-Header, toutes mes tables et colonnes sont en utf8_general_ci...

Si je tape " é " dans un mon formulaire, il s'affiche " é " dans phpmyadmin. Et une fois cette info sur la page de résultat PHP, il s'affiche bien: " é "...

Quelqu'un à une idée pourquoi mes pages PHP envoient et recoivent les donnée UTF-8 et les affichent correctement, alors que phpmyadmin, semble recevoir les même données UTF-8, met les affiche comme si c'était du ANSI (si j'ai bien compris toute ma lecture sur le sujet..)

Comment puis-je dire à phpmyadmin-MySQL que les données qu'il recoit sont du UTF-8...


Si je rentre manuellement dans phpmyadmin des infos, ex: é
Et bien il s'affiche bien dans phpmyadmin, mais j'ai un � dans l'affichage de ma page...

Merci pour votre aide

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.
3
Eh bien j'avais suivi le tuto de franescu (merci) et terminé par le set names... et ça n'avais pas focntionné: ma bdd étzi toujours en latin 1 (ça disait utf8 mais l'affcihage des données prouvait iso8859-1...........)

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...........
0
Utilisateur anonyme
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.
1
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...???
0
Utilisateur anonyme > pierre
20 juin 2008 à 22:39
"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...
0
pierre > Utilisateur anonyme
20 juin 2008 à 23:09
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...
0
mysql_query("SET NAMES 'utf8'");
merci bcp; vous m'avez sauvé la vie!
0
mysql_query("SET NAMES 'utf8'");
ça m'a résolu mon problème aussi !!

merci beaucoup :)
0