IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

encodage avec ZF2/Doctrine2


Sujet :

Zend Framework PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut encodage avec ZF2/Doctrine2
    Bonjour à tous,

    J'ai un problème avec mes sélections, lorsque je sélectionne un champ de ma base de donnée sans accent, tout se passe bien mais dès lors qu'il y a un accent ou un caractère spécial, la valeur retournée est "Null".

    Comment puis-je faire pour résoudre cette erreur ?

    J'ai essayé d'ajouter header( 'content-type: text/html; charset=utf-8' ); mais ça ne change rien.

    Merci d'avance

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Bonjour,

    Par défaut sur ton environnement ton SGBD (je considérerais que c'est MySQL) doit considérer qu'il transfère des données en ISO-8859-1. Si derrière ton serveur envoie de l'utf-8, ce que tu forces avec ton header() d'ailleurs, normal que ça casse les accents.

    Le mieux est de donner à MySQL comme instruction de travailler en UTF-8, ce qui peut se faire en exécutant la requête suivante avant la première requête SQL de chaque page :

    Comme ce n'est pas très simple ni propre d'exécuter une requête à chaque page manuellement, il est possible d'utiliser une option de PDO pour spécifier une commande à exécuter à chaque connexion : http://php.net/manual/en/ref.pdo-mys...r-init-command

    Il te suffit donc de configurer Doctrine pour que le tableau driverOptions contiennent la valeur SET NAMES 'UTF8'" pour la clé PDO::MYSQL_ATTR_INIT_COMMAND.

    Si ton Doctrine est configuré dans un fichier de configuration qui n'as pas forcément accès à la constante, tu peux utiliser la valeur 1002 à la place.

    Hope this helps !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    J'ai essayé de configurer doctrine avec le driverOtpion 'charset' => 'UTF8'
    dans mon globla.php j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    return array(
     
        'db' => array(
            'driver'         => 'Pdo',
            'dsn'            => 'mysql:dbname=bd1;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',
            ),
        ),
     
    );
    et dans mon local.php j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    return array(
        'db' => array(
            'username' => '###',
            'password' => '###',
        ),
        'doctrine' => array(
            'connection' => array(
                'orm_default' => array(
                    'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                    'params' => array(
                        'host'     => 'localhost',
                        'port'     => '####',
                        'user'     => '###',
                        'password' => '###',
                        'dbname'   => 'bd1',
                        'charset'   => 'utf8',
                    )
                )
            )
     
        ),
     
    );
    Maintenant, ma sélection se fait correctement mais lors de l'affichage, j'ai le code ASCII qui s'affiche a la place des caractères spéciaux. Pourtant mes metas sont bien présentes...

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Pas très sûr de comprendre quel problème se pose, par contre je rebondis juste sur la question des metas : ce ne sont pas les metas dans le HTML qui déterminent le bon encodage (ou alors uniquement si la page est locale et pas hébergée sur un serveur) mais les headers HTTP envoyé par le serveur.

    Il faut s'assurer que le vhost Apache soit bien configuré pour envoyer de l'utf-8 (via une instruction AddDefaultCharset utf-8 dans la configuration de ton vhost ou dans ton htaccess).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    En réalité quand je fais un var_dump() de ce que doctrine me renvois j'ai quelque chose qui resemble a ça : 'Déclencher auprès'
    et ce qu'il s'affiche a l'écran : 'D\u00e9clencher aupr\u00e8s'

    Merci pour votre réponse, je vais aller faire un tour du coté de ma vhost

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] PHP et Doctrine2 avec ZF2 sur NetBeans
    Par m4laki4n dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 24/07/2013, 15h51
  2. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  3. Pb encodage avec javascript et JSP
    Par marti dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/12/2005, 10h06
  4. Porblème d'encodage avec un EDI java sous Suse 9.3 pro
    Par HNT dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 12/11/2005, 12h32
  5. Encodage avec XML
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 25/10/2005, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo