2010-07-09 6 views
4

Je viens de rencontrer quelque chose d'assez étrange, j'utilise Zend Framework 1.10 avec le module Zend_Db_Table pour lire des données d'une base de données. La base de données elle-même, la table et les champs en question ont tous leur collation définie sur "utf8_general_ci" et tous les caractères spéciaux apparaissent correctement formatés dans la base de données lorsqu'ils sont vérifiés avec phpMyAdmin. De plus, l'enregistrement avec Zend_Db_Table fonctionne très bien, mais quand je lis les données et que je les renvoie à mon navigateur, il est renvoyé comme ISO-8859-1, pas comme UTF8. J'ai remarqué la même chose en essayant d'utiliser json_encode (qui ne fonctionne qu'avec les chaînes UTF8 en entrée) sur une valeur renvoyée par la base de données.Zend DB et l'encodage

Comment puis-je définir que Zend_Db_Table/Zend_Db_Row doit toujours fonctionner avec UTF8 et me renvoyer une valeur UTF8? Je n'ai encore rien défini concernant l'encodage dans mon application.

Merci beaucoup pour votre aide!

Répondre

12

Notez simplement. Dans mon cas, celui-ci a aidé:

$this->db = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => $config['db_hostname'], 
     'username' => $config['db_username'], 
     'password' => $config['db_password'], 
     'dbname' => $config['db_database'], 
     'charset' => 'utf8' 
    )); 
+0

App.ini Cela n'a pas pour moi, mais comme @robertbasic commenté ci-dessous "resources.db.params.charset = utf8" dans l'application ini a résolu le problème. – ktamlyn

+0

En faisant cela la réponse acceptée puisque les upvotes favorisent clairement cette solution (avec le commentaire de @ robertbasic) – Robin

1

Ok vient de trouver la solution, essayez de le faire:

$db = Zend_Db::factory($config->database); // Setting up the DB 
$db->query("SET NAMES 'utf8';");   // That's the magic line I was missing 

Hope this helps quelqu'un d'autre à un moment donné :)

+9

il est plus facile juste ajouter: 'resources.db.params.charset = utf8' à votre – robertbasic

0

Aussi, vous pouvez simplement mettre la clé "charset" avec la valeur désirée dans config et le pilote DB exécutera une requête appropriée (en fonction du SGBD utilisé). Il semble qu'actuellement (version 1.10.5) presque tous les pilotes le supportent.

4
resources.db.params.charset = utf8 

comme robertbasic dit.

Questions connexes