Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je rencontre un problème.
En effet quand j'essaye d'afficher des chaines extraites de ma bdd alors celle ci est mal encodée.
Pourtant :
- ma base de donnée est en utf8_general_ci
- mes tables sont en utf8_general_ci
- mes champs sont en utf8_general_ci
- Dans mon config j'ai "db.params.charset = utf8"
- et dans mon layout j 'ai bien "<?php echo $this->headMeta('text/html; charset=UTF-8', 'content_type', 'http-equiv'); ?>"
Exemple de mon problème :
Au lieu de m'afficher :
Paramètrage système
sur ma page j'ai
Param�trage syst�me
Avez vous une idée de la raison de ce soucis d'affichage ?
Merci d'avance.
Modif : En revanche je tiens à signaler que les autres accents qui proviennent de chaines php (écrite en dur dans le code) sont biens affichés.
Dernière modification par docaze21 (17-04-2009 16:36:16)
Hors ligne
J'ai eu le même problème. Utilise utf8_decode() dans ta vue pour les données récupérées depuis la bd.
Hors ligne
Euh je me vois mal faire un utf_ENcode sur toutes mes variables (extraites de la bdd) de ma vue.
Il doit surement y avoir une solution plus "propre".
Merci.
Hors ligne
Bien sur je précise que tous mes scripts de mon projet sont encodés en UTF8
Hors ligne
dans ta config apache, tu as bien dans ton virtual host ?
DefaultCharset UTF-8
A+, Philippe
Hors ligne
Voila ce que j ai pour mon virtual host :
<VirtualHost *:80> DocumentRoot "C:/wamp/www/cms/trunk/public" ServerName cms.localhost AddDefaultCharset utf-8 </VirtualHost>
http://httpd.apache.org/docs/2.0/mod/core.html#adddefaultcharset
Mais ce n'a rien changé.
J'ai pourtant bien redémarré les services.
Dernière modification par docaze21 (15-04-2009 16:26:16)
Hors ligne
Au risque de dire des bétises, j'ai eu le même problème, et je crois que c'etait parce que j'avais oublié le doctype.
Je te montre le début de mon layout :
<?php echo $this->doctype(); <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <?php echo $this->headMeta() ->setHttpEquiv('Content-type', 'text/html; charset=utf-8')
en esperant que ca t'aide
Hors ligne
Cela n'a rien changé,
Pourtant le code de mon layer est maintenant :
<?php echo $this->doctype();?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <?php echo $this->headMeta()->setHttpEquiv('Content-type', 'text/html; charset=utf-8')?> </head>
C'est plutôt embêtant. Et a force de chercher je commence par être désespéré.
Help me ! Merci
Hors ligne
C'est utf8_DEcode() et non utf8_ENcode()
Hors ligne
Cette solution ne résous pas mon problème.
En effet elle decode seulement les variables qui ne viennent pas de la bdd.
Les variables qui proviennent de la bdd sont donc toujours mal encodées.
Je pense plutôt que c est une configuration à faire au niveau du connecteur mais je ne vois pas lequel...
Surtout que j'ai un projet quasi identique avec tout encoder de la même manière et cela marche sans soucis.
Une idée ?
Hors ligne
@ziedb : le but est de travailler entièrement en UTF-8, donc normalement pas besoin de utf8_decode et pas besoin de conversion de type.
@docaze21 : je commence à avoir un doute sur ta conf db.params.charset = utf8
Essaye de lancer la requête :
SET NAMES 'utf8';
avant ta 1ère requête SQL. Cette requête indique à Mysql que dans la connexion courante avec PHP, la base doit papoter en UTF8. (je pensais que ton db.params.charset servait à ça, mais peut-être pas, j'en sais rien).
A+, Philippe
Hors ligne
Hello,
Le connecteur ne gère pas encore le charset via les paramètres (ZF-1541) et ce n'est pas sûr que ce soit implémenter pour la 1.8.
Il faut forcer la première requête comme le propose Philippe. J'ai étendu Zend_Db_Adapter_Mysqli en Mp_Db_Adapter_Mysqli pour ajouter la commande en fin de méthode _connect(), ensuite il faut modifier tes paramètres de connexion et ajouter un 'adapterNamespace = Mp_Db_Adapter'.
A+
Hors ligne
Effectivement,
J'ai trouvé une methode qui me convient bien : http://www.zfsnippets.com/snippets/view/id/13 .
En revanche plutot que de faire :
$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;'); $params = array( 'host' => $config->db->params->host, 'username' => $config->db->params->username, 'password' => $config->db->params->password, 'dbname' => $config->db->params->dbname, 'driver_options' => $pdoParams ); $adapter = $config->db->adapter; $db = Zend_Db::factory($adapter, $params);
J'aimerai pouvoir directement mettre mon paramètre driver_options dans mon config.
Mais je ne vois pas comment faire ...
Voila ce que j 'aimerais faire :
db.adapter = PDO_MYSQL db.params.host = localhost db.params.username = root db.params.password = db.params.dbname = test db.params.driver_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
Bien sur ce code est faux, mais c'est simplement l'idée de ce que j aimerais faire.
Cela est il possible ?
Hors ligne
Hello,
C'est ce que doit résoudre ZF-1541 (enfin en théorie).
A+
Hors ligne
Donc ca veut dire pas de solution pour mettre cette ligne dans le config ?
Hors ligne
As tu accès à la conf de mysql ?
Si oui ajoute ça à my.cnf :
[mysqld] .... .... character-set-server=utf8 skip-character-set-client-handshake
Hors ligne
alien7 a écrit:
As tu accès à la conf de mysql ?
Si oui ajoute ça à my.cnf :Code:
[mysqld] .... .... character-set-server=utf8 skip-character-set-client-handshake
Ta solution ne me convient pas car d'autres projets utilisent ce serveur mysql et ils marchent très bien.
Merci quand même.
Il faudrait maintenant simplement trouver une solution pour mettre "db.params.driver_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');" dans le config.
Hors ligne
Hello,
ZF-1541 est résolu depuis ce matin et sera donc disponible pour la prochaine release 1.8.
A+
Hors ligne
J'ai le même problème que docaze21 mais avec un projet utilisant MSSQL. quel est l'equivalent pour le "set names utf8" dans MSSQL? Il y a t'il un moyen d'avoir une solution indépendante du langage SQL propre à chaque SGBD?
Merci pour vos réponse.
Fatahou
Dernière modification par fatahou (13-05-2009 10:07:28)
Hors ligne
Pages: 1