Ne contient pas forcément que de l'humour ;)

Aller au contenu | Aller au menu | Aller à la recherche

HumourEnPJ en UTF-8

Une mise à jour de taille côté webmaster, mais pratiquement invisible (enfin, je l'espère d'ailleurs !) côté visiteur : le passage en UTF-8 d'HumourEnPJ.

Une mise à jour de taille côté webmaster, mais pratiquement invisible (enfin, je l'espère d'ailleurs !) côté visiteur : le passage en UTF-8 d'HumourEnPJ.

ISO-8859-1 et UTF-8

Quoi t'est-ce donc que l'UTF-8 ?? C'est un format d'encodage des caractères contenu, entre autre, dans les pages web. L'encodage actuel était l'ISO-8859-1.

Pourquoi passer en UTF-8 ? Principalement, car cet encodage est l'encodage qui devient le standard pour le web. En particulier, je me suis mis à utiliser du XML pour renseigner les informations relatives aux pièces jointes déposées sur le site, et cela posait quelques petits problèmes de compatibilité... Ce n'est qu'une des raisons, car les gadgets pour google ou netvibes exigent aussi de l'UTF-8, ce qui nécessité des conversion juste pour ces modules... Bref, c'était une chose à faire...

Il y a plusieurs niveaux à convertir : l'encodage des pages PHP du site, les informations HTML des pages et le contenu de la base de donnée.

Les étapes

Indiquer au navigateur que le format de l'encodage des pages

Les navigateurs respectent la priorité suivante pour savoir quel est l'encodage de la page reçue :

  1. l'information fournie en local par l'utilisateur (pour forcer l'encodage via le menu adéquat du navigateur),
  2. le header HTTP envoyé par le serveur (la plupart du temp Apache),
  3. le prologue XML (s'il est indiqué),
  4. la balise "meta" (indiqué dans le code HTML).

Il suffit d'une seule de ces informations pour que la page soit affichée correctement. Sur un hébergement mutualisé, il est rare d'avoir accès à la configuration du serveur (apache). L'information à modifier serait la suivante :

AddDefaultCharset UTF-8

Il est aussi possible d'envoyer le header sur chaque page PHP :

header('Content-Type: text/html; Charset=UTF-8');

Pour le HTML, il faut placer entre les balises <HEAD>, le code suivant :

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

(bien sûr, vérifier qu'il n'y ait pas la même ligne version ISO).

Pour une page qui affiche du XML, l'indication à faire figurer serait la suivante :

<?xml version="1.0" encoding="UTF-8" ?>

Côté base de donnée

Dans le cas d'HumourEnPJ (comme beaucoup d'autres sites web), c'est du MySQL. La base de donnée était en fait déjà convertie en UTF-8 suite à une migration de base de donnée qui m'avait d'ailleurs un peu posé problème de ce point de vue là ! Je vous laisse donc vous reporter aux 2 articles suivants :

Côté encodage des pages de code

Selon qu'on écrit sur windows, linux ou apple, l'encodage des caractères par défaut d'un éditeur de texte est différent. Mais il est possible de choisir cet encodage dans les éditeurs de texte "avancés". Ex. : Notepad++, PSPad, Dreamweaver, Netbeans, Eclipse etc. Malheureusement, je n'ai pas trouvé de logiciel permettant de faire proprement sous Windows la conversion d'un site entier par lot. C'est à dire convertir les pages contenues dans tous les dossiers et sous-dossier de mon site. Le seul qui s'en approchait était Eclipse (avec lequel je travaille pour HumourEnPJ), mais il ne converti pas les caractères, il se contente d'enregistrer toutes les pages du projet au format indiqué et du coup tous les caractères accentués se retrouvent mal affichés ! :(

Je me suis donc rabattu sur le classique "iconv" de linux... Et je me suis un peu battu pour trouver un script me permettant de faire la conversion de toutes mes pages. Voici ma démarche :

  1. Tout d'abord, faire une sauvegarde !
  2. Vu qu'on n'est jamais trop prudent, j'ai ensuite fait en plus une copie à partir de laquelle j'ai travaillé (c'était d'ailleurs presque indispensable vu que j'ai copié les fichiers de mon PC Windows vers un PC sous Ubuntu en dual-boot.
  3. J'ai ensuite lancé un script trouvé sur le web et que j'ai adapté pour mon cas. Voici ce script :
  1. #!/bin/bash
  2. mkdir www_utf8
  3. for f in $(find www_iso/ -type f -name "*.php")
  4. do
  5. d=$(dirname $f)
  6. mkdir -p www_utf8/$d/
  7. iconv -f iso-8859-1 -t utf8 $f -o www_utf8/$f
  8. done

Pour utiliser ce script, il faut :

  1. placer les sources à convertir dans un dossier www_iso
  2. placer le script au même niveau que ce dossier,
  3. exécuter le script.

Il va parcourir automatiquement toute l'arborescence du dossier source et créer automatiquement l'arborescence dans le dossier converti. Ici, le script traite uniquement les fichiers donc l'extension est ".php". Ceci est bien sûr adaptable.

Seul inconvénient, cela converti aussi les fichiers qui étaient déjà en UTF-8 et du coup ces fichiers sont corrompus (il suffit soit de les remodifier à la main ou de les récupérer dans la sauvegarde faite auparavant). Il doit y avoir moyen d'ajouter un test pour vérifier si le fichier en cours de traitement n'est pas déjà au format destination (mais je n'ai pas poussé jusque là !).

Quelques liens

Neovov : Convertir un site en UTF-8

Aquatz : Encodage, convertir un site en UTF-8

Site du zéro

Coin du webmaster