CakePHP : encoder son site en UTF-8

Si vous réalisez des sites en français (ou biélorusses) avec CakePHP, vous allez tomber sur l’éternel problème des caractères accentués et d’encodage de vos pages. C’est très simple à résoudre en cinq points qu’il faut retenir sous peine de tapage de tête contre le mur.

Encoder les fichiers en UTF-8

Première chose à faire, configurer votre éditeur pour qu’il enregistre tout les fichiers en UTF-8. Certains le font de base (Netbeans), d’autres non (Eclipse). Une fois que c’est fait c’est pour la vie.

Encodage de l’application CakePHP

Dans le fichier /config/core vous devez avec la variable de configuration « App.encoding » définie à « UTF-8″. Quand vous créez une nouvelle application c’est la valeur par défaut.

Configure::write('App.encoding', 'UTF-8');

Encodage des vues

Dans vos layouts, pensez bien à définir l’encodage de la page en utf-8. Avec CakePHP c’est simple, ajoutez la ligne suivante entre les balises « head » :

echo $html->charset();

La base de données

Quand vous créez votre base enregistrez la en utf-8 aussi. Avec Mysql et phpmyadmin, définir : « Interclassement » et « Interclassement pour la connexion MySQL » en  « utf8_unicode_ci ». Ça vous évitera des problèmes d’enregistrements de données et c’est conseillé pour le multilangue.

Connexion de CakePHP à la base de donnée

Assurez vous que la connexion à la base de donnée s’effectue elle aussi en UTF-8. Le fichier de config c’est /config/database.php et vous devez avoir un truc du genre :


var $default = array(
'driver' => 'mysql',
'database' => 'bdd',
...
'encoding'=>'utf8'
);

Ça s’écrit différemment en fonction du type de base  (MySQL, Oracle etc.). Mysql c’est « ‘encoding’=>’utf8′ », Oracle c’est « ‘charset’ => ‘UTF8′ », et PostgreSQL je sais plus.

Tags : , ,

6 réponses à “CakePHP : encoder son site en UTF-8”

  1. Bob dit :

    BOnjour,
    j’ai suivi toutes les étapes que vous avez indiquées mais le problème persiste. Les textes qui contiennent des accents et qui proviennent de la base de données sont corrects mais ceux qui sont insérés directement dans le layout sont mal encodés.

    Une idée ?

    Merci d’avance et bonne continuation pour votre blog.

  2. Airzebeth dit :

    Hello, merci beaucoup, il me manquait juste la dernière étape et cet article m’a épargné des heures d’arrachage de cheveux. Cool !

  3. Anikon dit :

    Bonjour,

    pour Bob, à mon avis tu n’as pas modifié l’encodage de ta page dans ton éditeur.

    pour moi, tout est bien paramétré mais les accents de la base reste incorrect ??!!

  4. admin dit :

    Bonjour,

    je pense que cela viens de la configuration de la bdd. L’Interclassement pour la connexion MySQL est-il sur « utf8_unicode_ci » ?

    Normalement si la totalité des point sont réunies c’est bon. Une fois qu’on y arrive c’est pour la vie ;)

  5. admin dit :

    Pour bob cela peut venir de la « Connexion de CakePHP à la base de donnée » ou de l’encodage des fichiers en utf-8 en effet.

  6. Bob dit :

    OK tout marche maintenant MERCI.
    Seulement j’ai remarqué que lorsque l’on rajoute « $html->charset();  » dans le layout, les pages chargent beaucoup plus lentement sous firefox que sans. Les élément qui étaient déjà chargés (ma structure du site en css) ne restent pas, on a une page blanche le temps de tout recharger.

    Est-ce normal ??? J’espère avoir été clair.
    Merci d’avance

Laisser un commentaire