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.
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.
Hello, merci beaucoup, il me manquait juste la dernière étape et cet article m’a épargné des heures d’arrachage de cheveux. Cool !
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 ??!!
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
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.
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