Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je me cogne à un gros souci actuellement, et je n'arrive vraiment pas à trouver la source du problème, si ça vient de Zend ou de MySQL.
Toutes les données que j'insère en base ont les accents qui s'affichent mal (je le vois via PhpMyAdmin).
J'ai bien précisé le charset en méta :
$view->headMeta()->prependHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
Ma base de données a l'interclassement par défaut :
utf8_general_ci
et toutes mes tables ont cet interclassement.
edit: détail supplémentaire, même quand je passe un champs en latin1_swedish_ci, ça ne prends pas 8O
Par exemple : Bérichon => Bérichon
Donc je ne vois pas ce qui peut causer ce problème...
Pour tester, j'ai appliqué la fonction utf8_decode($champs) sur les données avant les insertions... et là ça marche, les caractères s'affichent bien. Comme utf8_decode convertit les utf-8 en ISO, je me dis qu'il y a quelquechose qui cloche sur ma base MySQL.
Merci d'avance pour votre aide.
Dernière modification par supertino7 (10-06-2009 16:12:20)
Hors ligne
L'encodage de tes tables ne veut pas dire que ta base communique en UTF-8, ça veut juste dire qu'en interne de la base mysql, tes données sont encodées en UTF-8.
Pour changer le charset de communication entre mysql et php, il faut lancer la requête sql (avant de lancer ta première requête pour une page donnée)
set names UTF-8
Si tu veux basculer en UTF-8, il faut penser à pas mal de petites choses, tu peux aller voir ce tuto :
http://www.kitpages.fr/php_tutorial_utf8.php
A+, Philippe
Hors ligne
Merci de m'avoir donné cette piste.
Je pense effectivement que ça devrait tout résoudre. Si je comprends bien, il faut que cette procédure soit effectuée et repetée avant chaque script ?
Comment incorporer cette requête à mon architecture ? boostrap ?
Moi à qui on disait qu'avec l'UTF-8 j'étais moderne et paré pour l'avenir... en fait c'est carrément plus lourd à mettre en place
Dernière modification par supertino7 (10-06-2009 17:48:25)
Hors ligne
Bon eh bien ça marche quand je teste ainsi
$this->getAdapter()->query("SET NAMES 'utf8'"); return parent::insert($data);
Maintenant la meilleure solution serait de l'inclure dans le bootstrap. Le truc c'est que je viens de migrer en 1.8, donc le bootstrap n'est plus le même. Je n'arrive pas à avoir la main sur le dbAdapter par défaut :
protected function _initDb() { $dbAdapter = $this->getPluginResource('db')->getDbAdapter(); $dbAdapter->query('SET NAMES UTF8'); }
Ca me renvoie une erreur de quoteInto()
Fatal error: Call to a member function quoteIdentifier() on a non-object in C:\wamp\bin\zf\library\Zend\Validate\Db\Abstract.php on line 116
Edit :
Ah bah apparemment, c'est le nom de ma fonction qui n'allait pas.
Je l'ai renommé en _initMySQL(), et ça marche
_initDb() est définie dans la classe mère ?
Dernière modification par supertino7 (10-06-2009 18:26:46)
Hors ligne
Hello,
supertino7 a écrit:
Bon eh bien ça marche quand je teste ainsi
Code:
$this->getAdapter()->query("SET NAMES 'utf8'"); return parent::insert($data);
Le problème avec ceci c'est que même si une page n'a pas besoin d'accéder, tu vas tout de même exécuter une requête. Regardes le paramètre 'charset' pour les bases de données.
supertino7 a écrit:
_initDb() est définie dans la classe mère ?
Oui
A+
Hors ligne