Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-04-2015 15:26:01

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

[Résolu] Récupération de données et encodage UTF8

Bonjour à tous,

Voilà, je dois forcer la récupération de résultats en base de données en UTF8, sachant que les caractères de la base sont en latin1 et que je ne peux pas les modifier pour le moment.
Sachant qu'il y aura pas mal de récupération de données, car beaucoup de tables avec beaucoup de champs.
Sachant également que ce ne serait que temporaire, car après la base sera transformée en base UFT8, mais seulement après smile

Oui la BDD est très chargée et sera refaite petit à petit, c'est pour ça smile

Je pensais faire un viewhelper personnalisé pour surcharger les classes appelées par tablegateway ... ou si vous connaissez une meilleure solution, je suis preneuse smile

Thanks !

Dernière modification par amelie (13-05-2015 10:20:49)

Hors ligne

 

#2 27-04-2015 21:07:18

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [Résolu] Récupération de données et encodage UTF8

Bonjour,

Pour ouvrir une connection zf2 à la base de donnée en UTF-8 il faut faire ceci (dans la configuration zf2 pour la connection en BDD) :

Code:

[lang=php]
'charset'       => 'utf8',
         'driverOptions' => [
              1002 => 'SET NAMES utf8'
          ]

Toutes les données récupérés le seront normalement en UTF-8, après les encodage c'est toujours la galère, peut être qu'il faudra rajouter des choses.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 27-04-2015 21:46:09

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Bonjour,

Utilises-tu Doctrine ou Zend Db ?

Je dirais que le mieux serait de surcharger l'hydratation des objets en ajoutant des checks et conversions. Utilises mb_detect_encoding pour définir le type, puis utf8_encode. Regarde aussi iconv en passant. Je ne suis pas sûr exactement desquelles utiliser, mais à priori tout est là.

Hors ligne

 

#4 27-04-2015 23:52:26

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: [Résolu] Récupération de données et encodage UTF8

Bonjour,

Je me suis déjà retrouvé dans cette situation, voici le code que j'ai utilisé pour convertir mes chaînes de caractères :

Code:

function getStringEncoding($string)
{    
    $encoding = mb_detect_encoding($string, mb_detect_order(), true);
    if($encoding === false) throw new Exception('Impossible de détecter l\'encodage de la chaine entrée');
    
    return $encoding;
}
$object->label = iconv(getStringEncoding($object->label), 'utf-8', $object->label),

Si tu es SÛRE que c'est du latin1, tu n'as pas besoin de faire appel à la fonction. Fais attention, dans mon cas, je pensais que l'encodage était fait en latin1 dans la base, mais en fait l'encodage de Windows (CP1252) était utilisé. Les deux se ressemblent beaucoup, mais j'ai eu des problèmes avec certains caractères (de mémoire, il me semble que c'était les quotes ou les doubles quotes).

Tu peux aussi utiliser la fonction utf8_encode.

Il existe des logiciels qui permettent de migrer facilement ta base, personnellement, j'ai utilisé Talend.

Hors ligne

 

#5 28-04-2015 11:54:14

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Théocrite a écrit:

Bonjour,

Utilises-tu Doctrine ou Zend Db ?

Je dirais que le mieux serait de surcharger l'hydratation des objets en ajoutant des checks et conversions. Utilises mb_detect_encoding pour définir le type, puis utf8_encode. Regarde aussi iconv en passant. Je ne suis pas sûr exactement desquelles utiliser, mais à priori tout est là.

Salut,

J'utilise zend db. OK merci.

Hors ligne

 

#6 28-04-2015 16:06:57

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Du coup si tu veux plus d'aide il faudrait qu'on ait accès au code de tes mappers ou db gateway pour pouvoir t'aider avec une surcharge de l'hydratation incluant le code proposé par Seryus.

Possiblement, il faudrait créer un filter avec son code, puis un hydrateur dans lequel on injectera le filter (donc créer aussi une factory ici), et finalement injecter cet hydrateur dans ton mapper/ton gateway.

Hors ligne

 

#7 12-05-2015 17:05:53

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

JGreco a écrit:

Bonjour,

Pour ouvrir une connection zf2 à la base de donnée en UTF-8 il faut faire ceci (dans la configuration zf2 pour la connection en BDD) :

Code:

[lang=php]
'charset'       => 'utf8',
         'driverOptions' => [
              1002 => 'SET NAMES utf8'
          ]

Toutes les données récupérés le seront normalement en UTF-8, après les encodage c'est toujours la galère, peut être qu'il faudra rajouter des choses.

Bonjour,

Est-tu sûr de la syntaxe ?

Hors ligne

 

#8 12-05-2015 17:07:26

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Théocrite a écrit:

Du coup si tu veux plus d'aide il faudrait qu'on ait accès au code de tes mappers ou db gateway pour pouvoir t'aider avec une surcharge de l'hydratation incluant le code proposé par Seryus.

Possiblement, il faudrait créer un filter avec son code, puis un hydrateur dans lequel on injectera le filter (donc créer aussi une factory ici), et finalement injecter cet hydrateur dans ton mapper/ton gateway.

Un peu plus de détails, la solution m’intéresse, merci smile
J'ai mis la fonction dans mes objets modèle au niveau du exchangeArray mais je pense qu'il me faudrait quelque chose qui simplifie la récup des données

Dernière modification par amelie (12-05-2015 17:26:50)

Hors ligne

 

#9 12-05-2015 18:34:17

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu] Récupération de données et encodage UTF8

amelie a écrit:

Bonjour,

Est-tu sûr de la syntaxe ?

La syntaxe est celle pour Doctrine par contre les infos à y mettre son des options du driver donc suffit de regarder comment passer les infos à ton driver wink.

Hors ligne

 

#10 13-05-2015 08:46:55

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Orkin a écrit:

amelie a écrit:

Bonjour,

Est-tu sûr de la syntaxe ?

La syntaxe est celle pour Doctrine par contre les infos à y mettre son des options du driver donc suffit de regarder comment passer les infos à ton driver wink.

Aaaa ok.
Mais j'utilise zend db, pas doctrine smile

Hors ligne

 

#11 13-05-2015 09:19:35

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [Résolu] Récupération de données et encodage UTF8

My bad j'ai oublié de préciser que c'était spécifique à Doctrine, mais comme le dit bien Orkin, c'est des configuration que tu peux adapter a ton driver de BDD.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#12 13-05-2015 09:49:55

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

OK. J'ai mis cette commande sur ma conf mais ça ne fait rien, je suis obligée d'utiliser la méthode de Seyrus car les résultats me sont renvoyés en ASCII hmm mais je l'utilise dans mes modèles et c'est pas super propre, je voudrais passer par l'hydrateur mais je ne vois pas trop comment faire ...

Voici mon code pour la conf :

Code:

[lang=php]return array(
    'db' => array(
        'driver' => 'Pdo',
        'dsn' => 'mysql:dbname=xxxx;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        )
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        )
    ),
    'translator' => array(
        'locale' => 'fr_FR'
    ),
);

Dernière modification par amelie (13-05-2015 09:50:31)

Hors ligne

 

#13 13-05-2015 10:20:31

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Résolu] Récupération de données et encodage UTF8

Souci visiblement résolu, il fallait rajouter un param dans la conf smile

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