
Petit post rapide pour éviter de perdre du temps. Quand vous voulez faire communiquer correctement une BD en UTF-8 et CakePHP, voilà comment procéder.
CakePHP 1.1
function __construct() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
if(!self::$utf8IsSet and (get_class($db)!=’LdapSource’)) {
$this->execute(”SET NAMES ‘utf8′”);
self::$utf8IsSet = true;
}
parent::__construct();
}
Si vous n’utilisez pas LdapSource, vous pouvez supprimer “$db = …” et la 2ème condition du if.
Cette méthode est largement connue maintenant et depuis plusieurs mois mais ça peut toujours être utile de pas avoir à aller la chercher au fond d’un forum.
CakePHP 1.2
Moins connu cette fois, comment faire pour la version en cours de dev. Et bien il suffit de rajouter 'encoding' => 'utf8' dans la config de la base de données (database.php). Et si je trouve important de faire un post c’est pour souligner qu’il faut bien mettre utf8 et pas utf-8 car sinon on passe 1h à grogner pasque ça marche pas (oui, ça sent le vécu)…
Articles similaires
- CakePHP : validation Ajax
- Lancez vos sites sur orbite avec Fredistrano 1.0
- CakePHP : sauts de ligne et maux de tête
- CakePHP 1.2 RC1
- Projets en cours, le point.
- Apache - activation du mod_rewrite sous Ubuntu
- Ni spam ni captcha
- Version 0.3.2 de Fredistrano disponible
- CakePHP 1.2 beta disponible
- Version 0.3 de Fredistrano disponible



Bonjour, Merci tout d'abord
Bonjour,
Merci tout d'abord pour poster ceci, je cherchais justement comment mettre de l'unicode dans Cake (1.1)
Par contre, où doit-on faire la modification exactement ?
Cake 1.1 et UTF-8
dans app/app_model.php pour Cake 1.1
Merci beaucoup, ça a
Merci beaucoup, ça a résolu mon problème.
Par contre ça en a fait apparaître un nouveau : les sessions (via la base de données) sont rendues inutilisables.
Le seul courtournement que j'ai trouvé est de rajouter la ligne
$db->execute("SET NAMES 'utf8'");
en-dessous de
$db =& ConnectionManager::getDataSource('default');
dans libs/session.php pour la fonction __read($key)
Je pense qu'il y a une autre méthode, mais je n'en ai pas encore trouvée. A moins qu'il ne s'agisse d'un bug ?
Comme le précisait Dia dans
Comme le précisait Dia dans le billet d'origine, si tu n'utilises pas LdapSource le code se limite à :
function __construct() {
if(!self::$utf8IsSet) {
$this->execute(”SET NAMES ‘utf8′”);
self::$utf8IsSet = true;
}
parent::__construct();
}
tu as essayé ?
complément
je n'avais pas vu que tu utilisais les sessions via la base de données, j'ai répondu trop vite ;)
perso j'utilise les sessions sans base de données, donc difficile de t'aider, mais je dirais que si des données ont été enregistrées dans la base avant que tu fasses tes modifs UTF-8 il faut peut-être les supprimer...
Merci merci merci merci
Merci merci merci merci !!!!
J'ai pas passé une heure à grogner... et même pas à chercher.
Mais ces histoires d'encodages... c'est toujours une histoire à passer 3h bloquer !
Merci !