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

PHP & Base de données Discussion :

Le bon choix de charset entre php et MySQL ?


Sujet :

PHP & Base de données

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut Le bon choix de charset entre php et MySQL ?
    Bonjour,

    Je me trouve confronté comme beaucoup au problème des lettres accentuées entre PHP et MySQL.

    Quel est le bon choix à faire pour que tout ça fonctionne correctement en français ?

    Actuellement :
    - Interclassement pour la connexion MySQL = utf8_general_ci
    - Interclassement pour els tables de la BDD = utf8_general_ci
    - Default_charset dans php.ini = UTF-8
    - Enregistrement des fichiers de code par Eclipse = UTF-8

    J'avais cependant commencé à enregistrer des données dans une table qui était dans un autre interclassement (je ne sais plus lequel). J'ai modifié les données avec accent après avoir changé l'interclassement des tables mais j'ai toujours les lettres accentuées des données issues de cette table qui apparraissent sous la forme d'un point d'interrogation dans un losange noir dans la liste déroulante de ma page générée par PHP. Pourtant, d'une part ces données s'affichent correctement dans PHPMyAdmin et d'autres données accentuées enregistrées via un formulaire PHP de la même appli s'affichent correctement dans la page mais incorrectement dans phpMyAdmin !

    Bref, comme beaucoup, je galère avec ces lettres accentuées !

    De plus, je viens de découvrir ici que UTF8-general_ci n'est pas sensible à la casse ('ci' dans le nom = case insensitive ?), ce que je trouve dommage.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    UTF8_general_ci est l'interclassement, c'est à dire la régle utilisée par la comparaison et le classement des données ; tu peux le changer comme tu le souhaites.

    Ce qu'il peut te manquer c'est la l'encodage utilisé par mysql pour communiquer avec PHP :
    http://php.developpez.com/faq/?page=mysql#mysql-utf-8

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    J'ai bien utf8 dans les pages générées :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

    Dans la FAQ, je lis ceci :
    Mais ce n'est pas tout. Il faut également spécifier dans vos scripts PHP que les données récuperées ou transmises doivent être en UTF-8. La fonction magique pour ceci est : mysql_query("SET NAMES 'utf8'");



    Elle est à insérer juste après la connexion à la base établie, donc juste après avoir fait un
    mysql_connect($dbhost, $dblogin, $dbpass);


    J'utilise Zend_Framework.
    Ca se passe où ce genre de chose ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    J'ai partiellement résolu le problème...

    Comme les tables avaient été créées au départ en utf8_unicode_ci, les colonnes déjà alimentées étaient restées dans cet interclassement.
    J'ai modifié tout ça.

    Ensuite j'ai ajouté AddDefaultCharset utf-8 dans httpd.conf.

    J'ai aussi ajouté dans le fichier config.ini de mon appli Zend_Framework ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.params.charset = UTF8
    Jusque là, rien de changé dans l'affichage !

    Après d'autres recherches, j'ai ajouté ces commandes dans mon controleur qui appelle la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->view->setEscape('utf8_encode');
    $this->view->setEncoding('utf-8');
    Et là, miracle ! Les données accentuées s'affichent correctement...

    Mais les libellés accentués qui auparavant s'affichaient correctement sont maintenant mal affichés !

    Je ne sais plus trop quoi faire !

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Mais les libellés accentués qui auparavant s'affichaient correctement sont maintenant mal affichés !
    Je ne connais pas ZFW, donc c'est une idée comme ça, mais ce que tu décris à l'air de ressembler à une donnée qui au départ serait correcte (en utf-8) et serait (à nouveau) encoder en php en utf-8, ce qui débouche sur des caractères plutôt bizarres.

    C'est vraiment une idée comme ça, car ça m'est arrivé.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Je veux bien mais les libellés des champs de formulaire sont en dur dans le code (avec lettres accentuées) et ce code est enregistré au format UTF-8 par Eclipse.

    Si je supprime les deux lignes de code mentionnées dans le message précédent, j'ai les libellés bien affichés mais pas les données et si je les laisse j'ai les données OK mais pas les libellés !

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    C'est peut être un piège ces 2 fonctions.

    Je ne connais pas ZFW, du coup, difficile de t'aider sur ce coup là.

    Je te donne quand même comment je procède, sait on jamais.

    De mon coté, tout tient sur 4 choses.
    - Je défini explicitement à mon éditeur du UTF-8 à chaque création de page
    - Défini le charset des pages HTML (tu l'as déjà fais, donc c'est bon)
    - Défini au niveau de Php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=UTF-8');
    Un ini_set('default_charset', 'UTF-8') devrait fonctionner aussi je pense.

    - Au niveau SQL, j'exécute en tout 1er (avant les autres) :


    Il me semble pas avoir fait plus que ça.
    A savoir aussi que j'ai la même configuration que toi, du utf8_general_ci.

Discussions similaires

  1. [MySQL] Soucis d'accents entre php et mysql
    Par SirDarken dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 17/06/2008, 15h08
  2. [MySQL] problème entre php et MySql
    Par n0unours dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/05/2007, 09h46
  3. probleme entre php et mysql
    Par jsdar dans le forum Installation
    Réponses: 3
    Dernier message: 09/03/2007, 22h32
  4. Problème entre php et mysql
    Par kornmuse90 dans le forum Apache
    Réponses: 17
    Dernier message: 24/04/2006, 15h52
  5. Problème entre PHP et MySQL
    Par kornmuse90 dans le forum Installation
    Réponses: 12
    Dernier message: 19/04/2006, 18h37

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