logo piwik

Réseau - Web - GNU/Linux

2011 28 décembre

Éviter le double encodage dans MySQL

Rédigé par Marc GUILLAUME | Aucun commentaire

Votre site affiche des caractères bizarres ?

Votre site web est en utf-8, ce qui est correctement indiqué par la balise meta idoine :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Vos tables MySQL sont déclarées en utf8_general_ci, mais vos écritures se font sans avertir MySQL de cet état, et vous courrez à la catastrophe.

C'est un cas de figure qui peut facilement se présenter si lorsque vous écrivez dans les base vous n'utilisez pas le paramètre SET NAMES 'UTF8';. Comme MySQL, pour des raisons « historiques », considère par défaut que les informations qui lui sont envoyées sont codées au format ISO, si votre table utilise l'encodage utf8_general_ci MySQL va convertir les données reçues en utf-8. Si elle reçoit des données qui se trouvent déjà encodées utf-8 sans le paramètre ci-dessus elle va les traiter comme des données ISO et les ré-encoder en utf-8, ce double encodage conduisant à un affichage aberrant.

Il peut arriver que vous rendiez compte du ce problème en utilisant PhpMyAdmin et une base MySQL en utf-8. Si le site couplé à la base ne prend pas la précaution d'utiliser l'instruction SET NAMES. Le phénomène se trouve exposée sur cette page http://wiki.php]myadmin.net/pma/garbled_data.

Dans PhpMyAdmin cela vous sautera aux yeux, car lui utilise correctement l'écriture dans des tables utf-8. Du coup le contenu d'un champ que vous avez saisi  via un formulaire sur votre site et qui contient ceci "Âéàùèréçà" après son ré-encodage dans la table s'affichera ainsi "Âéà ùèréçÃ" dans PhpMyAdmin.

Pour écrire en utf-8 dans MySQL prenez l'habitude d'envoyer, juste après la connexion à MySQL (via php par exemple), la commande suivante : SET NAMES 'UTF8';, ainsi vous n'aurez plus de double encodage et votre affichage sera correct à la fois sur votre site et dans PhpMyadmin, et surtout vos tables MySQL contiendront des enregistrement en utf-8 propre.

Écrire un commentaire

Quelle est la quatrième lettre du mot jtourl ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.064s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml