Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-06-2009 15:51:47

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Probleme d'encodage (accents, etc..)

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 :

Code:

$view->headMeta()->prependHttpEquiv('Content-Type', 'text/html; charset=UTF-8');

Ma base de données a l'interclassement par défaut :

Code:

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

 

#2 10-06-2009 17:17:17

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Probleme d'encodage (accents, etc..)

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)

Code:

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 10-06-2009 17:48:18

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Probleme d'encodage (accents, etc..)

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 sad

Dernière modification par supertino7 (10-06-2009 17:48:25)

Hors ligne

 

#4 10-06-2009 18:17:19

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Probleme d'encodage (accents, etc..)

Bon eh bien ça marche quand je teste ainsi

Code:

$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 :

Code:

protected function _initDb()
    {
        $dbAdapter = $this->getPluginResource('db')->getDbAdapter();
        $dbAdapter->query('SET NAMES UTF8');
    }

Ca me renvoie une erreur de quoteInto() sad

Code:

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 smile

_initDb() est définie dans la classe mère ?

Dernière modification par supertino7 (10-06-2009 18:26:46)

Hors ligne

 

#5 11-06-2009 10:12:18

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Probleme d'encodage (accents, etc..)

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+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages