Les Problèmes d'encodage UTF-8 ou ISO-8859-15

Quel encodage choisir ? Quels sont les avantages et inconvénients ?

L'une des particularités dans le domaine du web lorsque l'on créait une application ou site web, est qu'il faut penser dans quelle langue allons-nous décider de publier notre site ? Et c'est là qu'il faut se pencher sérieusement dans le domaine de l'encodage. Ici je vais surtout mettre l'accent sur l'encodage utf-8 en php plutôt que en html, je n'expliquerais donc pas tous les aspects de l'encodage car il existe déjà suffisamment d'explication sur le web qui peuvent apporter toutes les réponses à vos questions.

Un bref petit aparté : Jadis à une époque assez proche du web, beaucoup de sites étaient encodé en iso-8859-15 ou bien l'iso-8859-1 (plus ancien). Ce qui impliqué que les textes rentrés dans nos sites devaient se présenter sous cette forme

il été une fois un être....

le genre de code vraiment très chiant à écrire alors que ca n'est que du texte ! Il faut pour cela connaitre et avoir une table des caractères iso à porté de clavier. J'ai donc très tôt vue tout l'intérêt de l'utf8 qui gérait déjà la plus part des formats de langues et évitait l'utilisation d'entités html tel que les é & co :) .

Le problème est que si vous décidez de faire un site tout en utf-8 vous pourrez être confronté à des problèmes d'affichage de caractère car tout les supports de développement ne gère pas forcément l'utf8 par défaut ou bien peuvent avoir une gestion assez particulière qui peuvent engendrer un certain nombre de problème d'affichage, et là ca peut devenir un vrai casse tête pour le développeur ou intégrateur afin de remettre de l'ordre dans tout ca.

MySQL gère par défaut le format ISO et rencontrait certain problème sur sa gestion de l'utf8, depuis sa version 4.... MySQL gère bien mieux le format d'encodage utf-8. Mais c'est aussi le cas du langage de programmation tel que PHP sur certaine fonction qui sont par défaut en encodage iso.

Certains comprendront tout à fait de quoi je parle 8-) .

En prévision de tout cela l'utf8 est devenu un standard du web (pas encore totalement mais on s'y rapproche) et dans un future proche avec la sortie de l'utf-16 qui reconnaîtra toutes les langues sans distinction ainsi qu'une consommation moindre au niveau du nombre de caractère (bits) employé pour former une lettre, cela deviendra un nouveau standard du web qui sera compatible avec tout les supports utilisés. D'ailleurs PHP dans sa version 6 sera pleinement compatible utf-8 et utf-16 et l'on rencontrera donc plus aucun problème de compatibilité d'encodage entre les supports à moins que l'erreur puisse venir de vous ? lol

Comment Bien encoder son site en utf-8

Déjà afin d'éviter toute erreur d'encodage il faut préparer son environnement et ses supports afin de rendre le tout compatible en utf8, à commencer par l'editeur ! sur lequel vous allez travailler. Donc dès que vous installerez un éditeur ou bien un IDE, veillez à ne pas oublier de paramétrer par défaut l'encodage utf-8 SANS BOM.

Ensuite vient le Charset de votre page html/php.... la balise meta à placer dans votre header est :

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

Même si votre page apparaît en utf-8 dans l'indicateur de votre IDE ou editeur web, vérifier le type de page en cliquant droit sur votre fichier et voir si il est bien en utf8 dans votre arborescence de projet.

Encodage de votre base de donnée MySQL et vos tables

Dans phpmyadmin vous avez une indication de l'encodage par défaut sur la partie droite de l'accueil, commencez déjà par changer votre base de donnée en utf8_general_ci. En ce qui concerne vos tables ne modifiez rien par défaut, comme cela votre base de donnée sera tout en utf8_general_ci sauf si vous avez du latin_sweedish.

Convertir l'encodage d'un Table dans la base de donnée

Il est déjà trop tard et vous rencontrez des erreurs d'encodage dans certaines de vos tables. il faut donc convertir cette dernière. Pour se faire le mieux est de rentrer directement la requête dans l'onglet "sql" de phpmyadmin (il y a sans doute une autre manière de le faire via l'interface de phpmyadmin mais je ne là connais pas et puis un peu de code ca fait pas de mal).

Convertir l'encodage d'un table de la BDD

  1. * ALTER TABLE nomTable CONVERT TO CHARACTER SET UTF8

Problème d'encodage en PHP

On peut aussi rencontrer dès fois un problème d'encodage si l'on n'a mal entamé la création d'un projet web. Notamment dans lors des requêtes sql. Il est donc à préconiser de forcer les requêtes à la base de donné en rentrant tout de suite après la connection à cette dernière cela :

  1. $dbconnect = mysql_connect('localhost', 'user', 'password');
  2. mysql_set_charset("utf8", $dbconnect);

Pour reconnaître le type de problème d'encodage que l'on peut rencontrer, il faut savoir les décrypter afin de passer le moins de temps possible sur cette problèmatique.

Visualiser

Si la page affiche des caractères de ce type : "é", "î", "Ã", ...

Les données ont été enregistrées au format UTF-8, et le navigateur les affiche en pensant avoir affaire à de l'ISO.

Si la page affiche des caractères de ce type : "�"

Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l'UTF-8.

Il est donc important de bien paramétrer ses outils dans le bon ordre afin d'éviter de rencontrer ces problèmes d'encodages qui peuvent vous faire passer beaucoup de temps dans vos débuts.