Coder en UTF-8

Bonjour.

J’ai souvent à voir des gens avoir des soucis d’encodage à tout va. Étant donné qu’avec la version 6 de PHP nous seront amené à coder via unicode, il est bon de se mettre à coder en utf-8 (si ce n’est pas encore le cas) pour prendre l’habitude.

Voici un petit tutoriel sur comment mettre en place un environnement en utf8, et comment l’utiliser. Cela peut paraître logique à certains, mais les débutants apprécieront.

Mettre en place son environnement.

1. La base de donnée

Commençons par notre base de données. Je vais prendre ici l’exemple de MySql, mais cela reste applicable à toutes les bases de données. Si vous décidez de passer en utf8, il sera nécessaire que votre base de donné soit elle aussi dans cet encodage. Comment faire? C’est très simple, vous pouvez :

- soit choisir l’encodage lorsque vous créez une base de données, en choisissant l’encodage : utf8_general_ci/utf8_unicode_ci.

Choisir lencodage de sa base

Choisir l'encodage de sa base

- soit en exécutant la requête suivante au début de votre script : SET NAMES UTF8

Il va sans dire que la meilleure des solutions est de créer votre base de donnée en choisissant de l’encoder en utf8 DES LE DÉBUT !

2. L’éditeur

Autre tâche importante après la configuration de votre base de données : configurer votre éditeur. De base bon nombre d’éditeur son configuré pour le latin1. Il va donc nous falloir changer cela. Vous trouverez ici quelques exemples d’éditeur, mais la logique est la même pour tous : Encoder dès le départ vos fichiers en utf8 !

- Eclipse : Dans window > preferences > General > WorkSpace, choisissez l’encodage UTF-8 dans la boite « Text file encoding ».

Choisir lencodage pour Eclipse

Choisir l'encodage d'eclipse

- Notepad++ : Dans Paramètrage > Nouveau document, choisissez l’encodage des nouveaux documents en UTF8. Pour modifier le document courant, allez dans Format et choisissez « Encoder en UTF8″.

Choisir lencodage de notepad++

Choisir l'encodage de notepad++

- Zend Studio : Tools > Desktop > Apparence : Choisissez UTF8 comme encodage.

Choisir lencodage de Zend Studio

Choisir l'encodage de Zend

3. Le header html

Maintenant que nous avons configuré correctement nos outils. Il nous reste à modifier l’encodage de nos pages. Lorsque nous passons sur une page web, notre navigateur regarde dans le header de notre page, quel est l’encodage à utiliser (si il est spécifié). Nous allons donc préciser au navigateur que notre page est à lire en utf8 de la manière suivante :

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

4. Via http : le header php

Lorsque vous visualisez une page web, vous vous reposez sur le protocole http. Parmi les informations envoyés concernant une page figure notamment l’encodage. Vous avez la possibilité de forcer l’entête http qui est envoyée grâce à ce code php :

<?php
header('Content-type: text/html; charset=UTF-8');
?>

Attention, pensez à placer cette information en haut de votre code, car une fois que du texte à été envoyé, le header n’est plus accessible et cela vous renverra une erreur.

5. Utiliser les fonction utf8_encode et utf8_decode.

Il arrive parfois que l’on ne puisse régler tous ces paramètres (soit en n’ayant pas la main sur une partie, soit en ne pouvant modifier ce qui a été fait auparavant). On peut alors utiliser les fonctions utf8_encode() et utf8_decode de php.

- utf8_encode : Cette fonction prend en paramètre un string encodé en latin1 / iso-8859-1 et retourne le même string mais encodé en UTF8.

- ut8_decode : Cette fonction prend en paramètre un string encodé en UTF8 et retournera ce même string encodé en latin1 / iso-8859-1

Quelques problèmes connus

Voici quelques problèmes courants et leur solution :

Problème : Apparition de caractères tels que « Ã », « Ã© » …

Solution : Lorsque des caractères de ce type apparaisse, c’est que votre donnée est encodée en utf8 mai que le navigateur tente de lire en mode « normal » (latin1 ou iso-8859-1). Pensez à spécifier le méta html vu au dessus.

Problème : Apparition de caracètères comme « � » …

Solution : Lorsque ce caractères apparait, c’est en fait l’inverse, notre navigateur est réglé pour lire de l’utf8 (via le méta html ou la fonction header() de php) mais tente de lire du texte qui est encodé normalement (latin1 ou iso-8859-1). Pensez à encoder votre fichier en utf8 ou utilisez la fonction utf8_encode (si votre texte provient d’une base de données).

Conclusion

On se rappelle donc qu’il faut :

- Encoder sa base de données en utf8, ou a défaut utiliser le « set names utf8″

- Configurer correctement son éditeur pour que les fichiers soient encodés en utf8.

- Préciser au navigateur l’encodage de la page.

- Ne pas paniquer ! Il est courant, lors de l’encodage d’un travail existant, d’avoir à changer à la main une partie des caractères mal encodés. Ne paniquez pas, soyez patient.

- TOUJOURS TRAVAILLER EN UTF8, et ce, dès le départ !

N’hésitez pas à me signaler toute erreur, à me soumettre des modifications et à me poser vos questions.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>