Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
En complément du message Charset, Casse set, char tête.., voici la solution pour établir une connexion avec la base de données (en l'occurrence MySQL) en utilisant UTF-8 :
<?php class My_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Mysql { /** * Creates a PDO object and connects to the database. * * @return void * @throws Zend_Db_Adapter_Exception an error occured */ protected function _connect() { // Checks whether a connection has already been established if ($this->_connection) { return; } // Setups the database connection parent::_connect(); // Provides UTF-8 support for any further database calls (setup server- // client communication) try { $this->query('SET NAMES UTF8'); } catch (Exception $exception) { echo "Unable to setup connection in UTF-8 mode with the database"; } } } ?>
Il faut bien sûr instancier par soi-même cet adapteur :
// Setups database connection $database = new My_Db_Adapter_Pdo_Mysql($configuration->database->configuration->asArray());
Au lieu d'utiliser la factory :
// Setups database connection $database = Zend_Db::factory($configuration->database->adapter, $configuration->database->configuration->asArray());
Cette solution est tirée du bug PDO: Allow definition of attributes to pass to the PDO object, upon creation of Zend_DB object. Elle est bien meilleure que celle consistant à modifier une instance de Zend_Db puisque la connexion n'est établie que lorsque vous effectuez vraiment une requête à la base de données.
Hors ligne
Merci pour cette astuce. Avec les 2 topics on commence à avoir beaucoup d'informations sur le passage en UTF-8. Je vais essayer de rédiger un petit tuto qui explique tout ça dans le détail.
J'aurai sans doute besoin de quelques relectures
Philippe
Hors ligne
Bon... pour ceux qui n'ont pas de problème de perfs et qui veulent un code plus léger...
$database = Zend_Db::factory($adapterName, $conf); $database->query('SET NAMES UTF8');
Mais comme le disait stephane, ça veut dire que dès votre fichier d'initialisation, votre connexion vers la base est ouverte, même si vous ne faites aucune requête...
Philippe
Hors ligne
Je rencontre le même type de problème. Un tuto intéressant par là:
http://www.iezzi.ch/archives/371
Hors ligne
Comment fait t'on lorsque on utilise un autre PDO? Par exemple MSSQL ne supporte pas l'instruction SET NAMES UTF8.
Je rencontre ce problème en ce moment. J'utilise un formulaire DOJO les labels ecrit en dur son bien encodé. Et ce qui vient de la BD (àçèé...) est mal encodé (des points d'interrogation dans mini losanges)
Hors ligne
Pages: 1