Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut, je débute avec Zend. J'ai fait une petite application qui retourne des données à partir de MySQL. Tous les "é" ne sont pas rendu correctement. Quelqu'un peut me dire pourquoi? Et ce que je dois faire?
Daniel
debutant-z
Hors ligne
Il y a 15 raisons possibles.
Je te propose d'aller voir ce tutoriel : http://www.kitpages.fr/php_tutorial_utf8.php pour que tu vois où peut se situer le problème.
A+, Philippe
Hors ligne
Si ta page affiche un texte du genre "é" à la place de tes "é" alors tu peux essayer deux solutions avec Zend_Db et mysql :
- rajouter "'driver_options' => array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;')" dans la fonction de connection à la base de donnée
- exécuter la requête "SET CHARACTER SET utf8" après la connexion
Ces deux commandes ont pour but de faire passer la connexion PHP<>Mysql en UTF-8. Sans ça, par défaut mysql croit que le client (PHP dans ton cas) n'accepte que l' iso-8859.
Si tu as des sortes de "?" à la place de tes accents alors il peut y avoir plusieurs possibilité :
- les tables de la base de donnée ne sont pas en UTF8 alors que tu veux y stocker du texte dans ce format là (mysql va transformer le texte comme il peut avec la perte de certains caractères)
- tu utilises certaines fonctions de php qui cassent les caractères UTF8 (par exemple il faut fournir un second paramètre à htmlentities pour qu'il traite la chaine comme de l'UTF8)
- ton serveur web ou ta page fait croire que ta page est dans un encodage qui n'est pas le bon
Le dernier cas est le plus simple à vérifier (il suffit de regarder l'encodage qui est coché dans le menu du navigateur) Le premier est simple si on regarde la requête de création de la table ou, avec un bon utilitaire de base de donnée, la structure de la table.
Le second est le compliqué. Il faut débugguer son code pour trouver à quel moment la chaine à été mal modifié. Ca peut aussi bien être un mauvais réglage de iconv ou mbstring (par exemple) qu'une erreur de programmation (utilisation de fonctions limités à l'iso, mauvais paramêtres dans les fonctions, etc)
EDIT : TIens je connaissais pas ce tutorial là.
Dernière modification par omega2 (11-10-2010 17:22:13)
Hors ligne
Ya un autre cas celui ou aucun caractère accentué n'est affiché, dans ce cas la c'est un problème de php et du pdo mysql
Hors ligne
si les é sont affichés aussi "é", cela peut venir du navigateur qui affiche la page en iso par défaut.
Il faut rajouter la balise suivante dans le head:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
sans oublier le doctype.
Hors ligne
throrin19 a écrit:
si les é sont affichés aussi "é", cela peut venir du navigateur qui affiche la page en iso par défaut.
Il faut rajouter la balise suivante dans le head:Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />sans oublier le doctype.
Oui c'est exactement ce que j'ai fait, mais il semble que le seul charset qui est réglé mon problème soit latin1.
Hors ligne
encode tes pages en utf-8 avec eclipse ou notepad++
Hors ligne
throrin19 a écrit:
encode tes pages en utf-8 avec eclipse ou notepad++
pourquoi dois-je absolument utiliser utf-8 et non latin1? Et je suis sous mac alors motepad++...
Dernière modification par débutant-z (14-10-2010 17:23:49)
Hors ligne
tu peux utiliser latin1, mais tu dois utiliser le même encodage partout, sinon c'est normal que ça sorte n'importe comment
Hors ligne
3uclide a écrit:
tu peux utiliser latin1, mais tu dois utiliser le même encodage partout, sinon c'est normal que ça sorte n'importe comment
ok non ça va j'ai mis ça dans le header.
Hors ligne
ta base est encodée comment? Si elle est en UTF-8, il vaud mieux avoir tout ton projet en UTF-8. De plus, il me semble que dans le futur, latin1 ne sera plus trop supporté. (quelqu'un peut confirmer?)
Dernière modification par throrin19 (15-10-2010 11:01:47)
Hors ligne
throrin19 > Il était prévus avec PHP6 de rendre PHP totalement compatible unicode (aussi bien dans le core que dans les modules) mais pas d'abandonner le latin1.
Maintenant que PHP6 a été abandonné, je ne sais pas combien de temps il va falloir attendre pour que toutes les fonctions de PHP gèrent nativement autre chose que du latin1 alors avant qu'on ne puisse plus coder des fichiers php en latin1, il va s'écouler pas mal d'années.
Hors ligne
throrin19 a écrit:
ta base est encodée comment? Si elle est en UTF-8, il vaud mieux avoir tout ton projet en UTF-8. De plus, il me semble que dans le futur, latin1 ne sera plus trop supporté. (quelqu'un peut confirmer?)
Que veux tu dire par base? Ma BD? Désolé, si ça semble stupide, mais au Québec, nous parlons plus généralement de BD. Elle est en utf-8. C'est dans mon layout que je change la charset en latin1:
<meta http-equiv="Content-Type" content="text/html; charset=latin1">.
Hors ligne
J'oubliais, il y a une aide de vue activé par défaut (à confirmé) qui encode la sortie de la vue...
Dernière modification par 3uclide (15-10-2010 18:38:27)
Hors ligne