Francescu e Dume

Encodage : convertir un site en UTF8 - PHP/MySQL



Encodage : convertir un site en UTF8 - PHP/MySQL
Alors qu'il y a quelques années l'UTF8 naissait , réconcilliant le monde entier, on aurait pu penser qu'il aurait immédiatement trouvé sa place. Si aujourd'hui créer un projet en UTF-8 est bien loin d'être systématique, il ne s'agit pas forcément d'un manque de volonté, mais plutôt d'une difficulté de mise en oeuvre, souvent déconcertante. Le problème d'encodage est récurrent, mais je vais essayer dans cet article de vous prouver que la mise en oeuvre de l'UTF-8 dans vos projets peut se faire très rapidement. Voici donc les grandes étapes pour migrer votre application web en UTF8, et pourquoi pas conquérir de lointains marchés !

Requêtes HTTP


Tout d'abord quand un visiteur arrive sur votre site, son navigateur doit savoir qu'il a affaire à de l'UTF8, alors voici la marche à suivre.
  • Par ordre de priorité pour le navigateur :
  • Fixer le parametre charset dans les requêtes HTTP (cf W3C)
    • dans apache remplacez AddDefaultCharset ISO-8859-1 par AddDefaultCharset UTF-8, (dans httpd.conf sinon rajoutez la ligne dans le .htaccess)
    • ou/et dans PHP avec header('Content-Type: text/html; charset=utf-8');
  • Mettre après le <head> dans votre fichier HTML le code suivant (ce code est connu de tous)
    • <meta content="text/html; Charset=UTF-8" http-equiv="Content-Type" />

MySQL


  • Ensuite, il faut premièrement changer les interclassements
    • de la base
      • ALTER DATABASE nomBase CHARACTER SET UTF8
    • des tables
      • ALTER TABLE nomTable CHARACTER SET UTF8
    • des colonnes
      • ALTER TABLE nomTable CONVERT TO CHARACTER SET UTF8
      • ceci changera toutes les colonnes de la table et convertira les données. Si vous aviez déjà mis de l’UTF8 dans une colonne avant d’en changer l’encodage il est encore possible de rétablir la cohérence des données :
        • ALTER TABLE nomTable CHANGE nomColonne nomColonne BLOB;
          ALTER TABLE
          nomTable CHANGE nomColonne nomColonne TEXT CHARACTER SET UTF8;
  • Puis il faut prévenir MySQL que vos interractions se feront en UTF8 en envoyant à chaque connexion :
  • SET NAMES UTF8

Editez en UTF8


Pour cela il faut configurer votre éditeur pour que vos fichiers soient en UTF8 (c’est nécessaire uniquement dans le cas de fichiers avec données sensibles - cad avec accents ou autres caractères non ASCII).

Veillez à placer l’encodage en UTF8 sans BOM car sinon le fichier contiendra un octet d’entête et PHP ne pourra plus envoyer de header ou de session (bug PHP#22108).
Encodage : convertir un site en UTF8 - PHP/MySQL

Developpez en PHP


Attention, une fois que votre site est en UTF-8 il va falloir changer quelques habitudes de développement :
  • jetez un coup d’oeil à l’extension Mbstring, par exemple pour strlen, utilisez mb_strlen
  • Comme l'a dit irnine94 dans son commentaire, faites bien attention car certaines fonction prennent en paramètre un charset qui par défaut est l'ISO vous devrez donc passer en paramètre UTF-8, comme par exemple la fonction htmlentities

Bonne chance à vous, et gardez à l'esprit que l'idée générale est d'avoir de l'UTF8 à tous les endroits de votre application.


Mercredi 29 Août 2007
Francescu e Dume

Accueil Accueil    Envoyer à un ami Envoyer à un ami    Version imprimable Version imprimable



Dans la même rubrique :