Bonjours à tous,

Je galère pas mal avec l'utf-8, je vais essayer de faire simple.

- Base de donnée Mysql déclaré en UTF-8, ainsi que toutes les tables et les champs. (seulement, les convertir à la main.)

- Site déclaré en utf-8 avec la balise méta, le serveur 1&1 ne renvoi aucun CharSet.

Comme je suis en phase de développement, les données sont directement inséré en Ctrl/C,Ctrl/V depuis word dans les champs Mysql via le PhpMyAdmin de 1&1.


Prenons l'exemple suivant:
http://img15.hostingpics.net/thumbs/mini_349971Capture.jpg

Je le colle dans le champs, et valide dans phpMyAdmin, les caractères y sont affiché correctement dans PhpMyAdmin, mais une fois sur mon site via une requête mysql les caractères speciaux ne sont pas reconnu.

Par contre, si je tape directement sur mon site " http://img15.hostingpics.net/thumbs/mini_349971Capture.jpg " sans passer par la base de donnée, l'affichage est correct.

Par contre², si je l'ai de la manière "dʒiˈtanu dʒiˈtanɔ" dans la base de donnée, cela s'affice correctement sur mon site

Il s'agit donc d'un problème au niveau de Mysql ? de mes requêtes ? Comment fait PhpMyAdmin pour afficher correctement mes données ?

J'avais cru comprendre qu'a partir de moment ou la base était en utf-8 ainsi que le charSet il n'était pas nécessaire d'utiliser des fonctions de conversion des caractère spéciaux

Merci beaucoup pour l'aide apporté Smiley cligne
Modifié par meche (22 Apr 2012 - 01:12)
Bonjour,

Ça ressemble à un problème courant avec MySQL: la plupart des serveurs MySQL sont configurés avec des connexions en latin1 (ISO-8859-1) par défaut. Tes données sont en UTF-8 et marquées comme telles dans les métadonnées de tes tables et de ta base, la connexion que tu crées dans ton script côté serveur web (script PHP ou autre) est en latin1, et donc MySQL va convertir à la volée tes données de UTF-8 vers ISO-8859-1 (peut-être en remplaçant des caractères par des points d'interrogation lorsqu'il n'y a pas de correspondance entre les jeux de caractères). Tu reçois donc de l'ISO-8859-1, avec potentiellement une partie de tes données corrompues.
La solution consiste à corriger la configuration du serveur si tu y a accès, ou encore à utiliser la directive SET NAMES dans une requête SQL juste après l'ouverture de la connexion.

Pas sûr que ça soit ça, mais ça y ressemble.

meche a écrit :
J'avais cru comprendre qu'a partir de moment ou la base était en utf-8 ainsi que le charSet il n'était pas nécessaire d'utiliser des fonctions de conversion des caractère spéciaux

Tu as bien compris. Encore faut-il que le client de ta base de données (c'est-à-dire ton script côté serveur) reçoive effectivement des données UTF-8.
Tu es un chef !! Tu avais bien raison, c'est un problème entre le serveur mysql et Apache.

J'ai utilisé la commande...

a écrit :
mysql_query("SET NAMES UTF8");


...juste après ma fonction de connexion mysql, et juste avant ma requête.


Comme je vais en avoir besoin pour chacune de mes requetes, je me demande si je ne vais pas directement l'ajouter dans ma fonction de connexion mysql.


Merci encore ca j'étais dans la panade. Bonne soirée !!!!
meche a écrit :
Comme je vais en avoir besoin pour chacune de mes requetes, je me demande si je ne vais pas directement l'ajouter dans ma fonction de connexion mysql.

C'est ce qu'on fait en général.
Voila, c'est ajouté à ma fonction maison de connexion.

Par contre, j'utilise la même fonction pour l'ajout Mysql, et ca par bien en Vrille.

Ca me traduit les caractères spéciaux en code ascii (je crois), mais comme j'utilise des fonctions mysql pour éviter les injections, c'est peut être elle qui font cela, à moins que ce soit le CharSet de cette page qui est foireux.

J'étudierais cela bientôt ^^ et je vous ferais par, histoire que cela servent aux membres Smiley smile
Modifié par meche (23 Apr 2012 - 12:55)