Voici un rapide tutoriel pour passer vos sites au tout
UTF-8.
Pour comprendre la relative complexité (on imagine que ce n'est qu'une ligne "
meta" à changer... au début), il faut avoir à l'esprit une chose que je vais essayer de vulgariser de mon mieux : l'encodage est en quelque sorte la "langue" dans laquelle les différents intervenants vont traduire les 0 et les 1 qu'ils s'échangent, pour vous les afficher de manière intelligible.
Pour plus d'information à ce sujet, je vous renvoie sur Openweb lire ceci :
Introduction aux jeux de caractères.
Pour l'utilisateur, c'est assez simple... mon navigateur... et le site à afficher doivent se comprendre.
Pour le développeur du site, c'est un petit peu plus complexe.
Je suis parti de l'idée somme toute "logique" que tout le monde allait devoir parler la même langue, l'
UTF-8 donc.
C'est là que le tout se complique, il y a plusieurs acteurs dans cette "discussion" pour faire tourner mon site :
- XHTML, qui structure le contenu,
- PHP, qui donc est le langage dynamique,
- MySQL, la base de données,
- Les fichiers du site, exemple : index.php
- et Apache, le serveur qui fait tourner tout ce joli monde.
L'idée est de faire discuter chacun dans la même langue afin qu'ils se comprennent... dès qu'ils échangent des données.
Première chose à faire...
tout sauvegarder ! Bases de données, fichiers, il faut y aller franchement, cela ne coûte rien.
Première chose à changer,
il faut dire à Apache de nous "donner" de l'UTF-8, ça n'est pas le cas par défaut (c'est du
ISO-8859-1). Comme je n'ai pas accès à la configuration d'Apache, cette étape se résume à changer le
header envoyé par défaut par le serveur.
header("Content-type: text/html; charset=UTF-8"); si vous servez votre site comme
text/html,
header("Content-type: application/xhtml+xml; charset=UTF-8"); si vous servez votre site comme une
application/xhtml+xml, comme le mien.
Ensuite,
la base de données... il faut savoir que My
SQL peut gérer l'encodage des données (la langue dans lesquelles elles sont "adaptées"), et la
collation, l'interclassement en français : comment se comporter avec ces données (comment "comparer" un "é" et un "e", comment gérer la casse, etc...). En gros, les règles de la "langue" choisie, pour reprendre l'analogie.
Bon, là, c'est simple (quoique un peu rébarbatif),
utilisez PHPmyAdmin, il faut aller dans "operations" (pour la base et pour chaque table), et changez l'interclassement. Ensuite, il faut également faire de même
pour chaque champ le nécessitant (exemple, des champs de type texte).
Pour ma part, j'ai pris
utf8-general-ci. Je n'ai pas besoin que ce soit sensible à la casse dans My
SQL pour mon site (un "E" est égal à un "e"), d'où le ci (=
case insensitive en anglais).
Pour information,
utf8-general-cs veut donc dire
case sensitive, et
utf8_general_bin signifie un classement binaire, donc pas d'interclassement à proprement parler.
Attention, cela ne veut pas dire que mon site ne gèrera pas les majuscules ou les minuscules (rien à voir), cela "explique" à My
SQL (et à My
SQL uniquement) comment gérer lui ces données !
A noter, si vous voulez forcer My
SQL à utiliser l'
UTF-8, il suffit de lancer cette requête avant toute autre :
SET NAMES 'utf8';
(sans rentrer dans les détails, cette requête "magique" aura le bonheur au passage de dire à My
SQL de tout convertir, interpréter et envoyer en
UTF-8... donc n'ayez pas peur de vous en servir)
Après,
PHP... là, c'est un peu le cirque :
PHP travaille nativement en
ISO, ce n'est qu'à partir de la v6 qu'il basculera entièrement en
UTF-8.
Deux modules permettent de gérer différents types d'encodages, mbstring et iconv.
mbstring s'occupe de la manipulation de chaînes tandis qu'iconv permet de convertir différents types d'encodages. Les conversions entre
ISO et
UTF-8 peuvent se réaliser à l'aide des fonctions
utf8_encode() et utf8_decode(), qui vont bien souvent vous sauver la mise.
Un exemple : les données de
FAQ du SOC (mon générateur de formulaires) doivent être affichées en ISO-8859-1, or elles arrivent en
UTF-8 depuis ma base de données. L'utilisation de utf8_decode() m'a permis d'afficher ces données de manière lisible, sans "é" à la place de certains caractères accentués.
Le bout du tunnel se rapproche... pour
XHTML, c'est assez simple dans mon cas :
<meta http-equiv="content-Type" content="application/xhtml+xml; charset=UTF-8" /> pour le servir en
application/xhtml+xml (le cas de mon site si vous utilisez un navigateur le gérant), ou
<meta http-equiv="content-Type" content="text/html; charset=UTF-8" /> pour le servir en classique
text/html.
Il reste enfin à
s'occuper des fichiers du site, eux aussi doivent être encodés en
UTF-8, notamment pour que le texte écrit "en dur" soit bien interprété, vu que tout le site va parler dans "la langue"
UTF-8, les fichiers doivent également s'y plier.
Là, il vous suffit de trouver un éditeur de code qui gère cela,
PSPad le fait par exemple très bien (dans PSPad, allez dans "format", cliquez sur
UTF-8, et sauvegardez.
Attention,
certains éditeurs spécifient en début de fichier un marqueur d'ordre des octets (
BOM en anglais). C'est inutile pour l'
UTF-8, et même dangereux : le fait d'insérer ce caractère au début d'un fichier php (donc avant la balise d'ouverture <?php) pourra provoquer une erreur du type "
headers already sent"...
à fuir de toute urgence !
La plupart des navigateurs usuels gèrent bien cet encodage, même
IE 6, c'est dire.
Normalement, vous devriez arriver à vos fins avec tout cela, d'autres tutoriels sont disponibles sur le web si vous avez des besoins plus spécifiques, notamment configurer Apache, etc... mais là, je vous laisse chercher !
Permalien : http://www.nicolas-hoffmann.net/source/1164-Petit-tutoriel-convertir-un-site-en-UTF-8.html
Aucun commentaire pour le moment.
Ce site est la propriété d'Hoffmann Nicolas. Tous droits de reproduction interdits.