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

EDI, CMS, Outils, Scripts et API PHP Discussion :

UTF-8 et phpMyAdmin : problèmes d'encodage [phpMyAdmin]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut UTF-8 et phpMyAdmin : problèmes d'encodage
    Suite à ce thread, j'ai décidé de passer à l'utf-8: http://www.developpez.net/forums/viewtopic.php?t=461471
    Mais j'ai déjà un problème! Dans ma base de données, il y a des caractères "bizarres" pour les "é" (par exemple) il y a: é

    Pourtant:
    interclassement: utf8_unicode_ci
    Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
    nterclassement pour la connection MySQL UTF-8 Unicode-ci

    J'utilise phpMyAdmin, et l'encodage des caractères (firefox) est bien utf-8.

    Merci pour votre aide!

    EDIT: lorsque dans ma page php je fais un select, cela s'affiche correctement
    EDIT2: phpmyadmin 2.6.0pl3

  2. #2
    Membre éprouvé Avatar de ..:: Atchoum ::..
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Salut,

    Attention à la configuration de l'affichage de phpMyAdmin. Peut etre bien que tout est en UTF-8 mais que ton phpmyadmin l'affiche en ISO....


  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    et donc je fais comment pour insérer manuellement des données (depuis phpMyAdmin). Car en effet, si j'insère "é", le select de ma page php affiche un losange noir avec un "?" à l'intérieur.

    Est-ce un fichier de config à modifier?

    Merci pour cette aide au passage à utf-8

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Et ton flux html ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    Citation Envoyé par Mr N.
    Et ton flux html ?
    hem, tu veux parler de quoi :
    Si c'est de l'option affichage->encodage des caractères (sous firefox) c'est bien en utf-8.

    Et sinon j'ai bien mis le <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    Les caractères que j'appelais "bizarres" sont en fait les correspondants iso-8859-1 de l'utf-8.
    phpMyAdmin ne veut pas me les afficher en utf-8! (et donc je ne peux pas insérer non plus via phpmyadmin)!

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    mmh, je trouve pas Malgré mes recherches sur le net, j'ai vu un type qui avait le même problème mais aucune réponse

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    regarde la source html de phpMyAdmin via Firefox et regarde si ya la bonne <meta> utf-8

    sinon essaye un .htaccess avec AddDefaultCharset UTF-8 dans le repertoire de phpMyAdmin pour voir se que sa donne

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    1) C'est bien en utf-8
    2) rien ne change

    Merci pour ces propositions, mais je ne comprend pas du tout pourquoi phpmyadmin affiche cela. Est-ce que mes données ne sont pas VRIAMENT en utf-8?

  10. #10
    Membre éprouvé
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    As tu bien reseigné l'interclassement UTF-8 de ta base de donnée, de tes tables et de leur champs?

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    question: faut-il changer qqch quand on passe en utf-8 dans php.ini ou dans le fichier de config de phpmyadmin?

  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2005
    Messages : 93
    Par défaut
    Désolé de remonter le sujet, mais je ne trouve pas de réponse.

    Config:
    - php5.04
    - mysql 4.1.12
    - phpMyAdmin 2.6.0-pl3
    phpmyadmin:
    - Language: Fr-UTF-8
    - Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
    - Interclassement pour la connection MySQL: UTF8_general_ci
    - Interclassement de la BD: utf8_general_ci

    Lorsque je me connecte je fais bien une query genre "set names utf-8", et en me connectant hors phpmyadmin j'ai pu bien voir que les caractères sont bien en utf8. (en lignes de commandes il s'affiche aussi é pour un "é")

    Le problème: sous phpMyAdmin les caractères sont affichés comme si c'était de l'iso => les é deviennent é (donc on ne peut pas insérer non plus: dans ce cas il s'insère un "é" => dans ma page php j'ai un losange noir avec un "?")

    Détails: mb_string n'est pas installé, aucun fichier de config modifié, le charset est utf-8 dans les <meta> myadmin. Pas de reboot.

    Si qqn a la moindre idée, cela m'aiderait bcp!!! Merci!

  13. #13
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    J'ai exactement le même problème que toi.
    As-tu trouvé une solution?

  14. #14
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut utf-8 suite
    Je traine cette galère depuis un bon moment et de temps en temps je cherche la solution sur le net.

    Cela semble venir de nul part et pourtant nous sommes nombreux dans ce cas.

    Il est clair pour moi que je ne dois pas toucher aux paramètres par défaut de Firefox, puisque l'utilisateur visitant un site ne doit modifier ses paramètres.

    Il y a sur firefox dans "Affichage" "Encodage des caractères" "Détection automatique" (Désactivé).

    Celui là j'aimerai bien l'activer pour voir, mais je ne trouve pas comment.

    J'utilise Golive CS2 pour créer mes pages, elles doivent être en encodage utf-8 ?

    Ma base mysql sous phpmyadmin est en utf-8 idem pour les tables et les champs.

    Je ne vois rien d'autre

  15. #15
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Ok, c'est bon, j'ai la solution.

    J'ai ajouté 2 lignes dans les fichiers dbi contenus dans le répertoire librairies/dbi/

    Voici les lignes pour chaque fichier :
    dans mysql.dbi.lib.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
        mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
    Après PMA_DBI_postConnect($link, $is_controluser);
    et avant return $link;
    Dans la fonction PMA_DBI_connect

    Au même endroit, dans le fichier mysqli.dbi.lib.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
    mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    Il s'agit en fait d'éviter au client mysql de faire une double conversion vers l'utf-8.

    Voici le code complet des deux pages maintenant pour la fonction à modifier :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    function PMA_DBI_connect($user, $password, $is_controluser = FALSE) {
        global $cfg, $php_errormsg;
     
        $server_port   = (empty($cfg['Server']['port']))
                       ? ''
                       : ':' . $cfg['Server']['port'];
     
        if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
            $cfg['Server']['socket'] = '';
        }
     
        $server_socket = (empty($cfg['Server']['socket']))
                       ? ''
                       : ':' . $cfg['Server']['socket'];
     
        if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) {
            $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0;
            // always use CLIENT_LOCAL_FILES as defined in mysql_com.h
            // for the case where the client library was not compiled
            // with --enable-local-infile
            $client_flags |= 128;
        }
     
        if (empty($client_flags)) {
            $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect';
            $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password);
        } else {
            if ($cfg['PersistentConnections']) {
                $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags);
            } else {
                $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags);
            }
        }
     
        if (empty($link)) {
            PMA_auth_fails();
        } // end if
     
        PMA_DBI_postConnect($link, $is_controluser);
     
        mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
        mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
        return $link;
    }
    et

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function PMA_DBI_connect($user, $password, $is_controluser = FALSE)
    {
        global $cfg, $php_errormsg;
     
        $server_port   = (empty($cfg['Server']['port']))
                       ? FALSE
                       : (int) $cfg['Server']['port'];
     
        if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
            $cfg['Server']['socket'] = '';
        }
     
        // NULL enables connection to the default socket
        $server_socket = (empty($cfg['Server']['socket']))
                       ? null
                       : $cfg['Server']['socket'];
     
        $link = mysqli_init();
     
        mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);
     
        $client_flags = $cfg['Server']['compress'] && defined('MYSQLI_CLIENT_COMPRESS') ? MYSQLI_CLIENT_COMPRESS : 0;
     
        $return_value = @mysqli_real_connect($link, $cfg['Server']['host'], $user, $password, FALSE, $server_port, $server_socket, $client_flags);
     
        if ($return_value == FALSE) {
            PMA_auth_fails();
        } // end if
     
        PMA_DBI_postConnect($link, $is_controluser);
        mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
        mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
        return $link;
    }

  16. #16
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Par défaut
    Etant donné qu'on trouve cette solution en cherchant un peu, je préfère préciser ici que ce n'est pas du tout ce qu'il faut faire.

    Pour se connecter à une base en utf-8 sur mysql en utilisant PHP, il faut préciser après le mysql_connect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SET NAMES 'UTF8'")
    Dans de nombreux frameworks PHP, il est possible de configurer sa connection à la base. Avec cakephp par exemple, il faut ajouter dans la configuration de base de données :

    Ainsi, les données affichées par phpmyadmin et les requêtes PHP seront les mêmes.

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Par défaut Utf-8 carractere arabe
    Citation Envoyé par SuperCed Voir le message
    Ok, c'est bon, j'ai la solution.

    J'ai ajouté 2 lignes dans les fichiers dbi contenus dans le répertoire librairies/dbi/

    Voici les lignes pour chaque fichier :
    dans mysql.dbi.lib.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
        mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
    Après PMA_DBI_postConnect($link, $is_controluser);
    et avant return $link;
    Dans la fonction PMA_DBI_connect

    Au même endroit, dans le fichier mysqli.dbi.lib.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
    mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    Il s'agit en fait d'éviter au client mysql de faire une double conversion vers l'utf-8.

    Voici le code complet des deux pages maintenant pour la fonction à modifier :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    function PMA_DBI_connect($user, $password, $is_controluser = FALSE) {
        global $cfg, $php_errormsg;
     
        $server_port   = (empty($cfg['Server']['port']))
                       ? ''
                       : ':' . $cfg['Server']['port'];
     
        if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
            $cfg['Server']['socket'] = '';
        }
     
        $server_socket = (empty($cfg['Server']['socket']))
                       ? ''
                       : ':' . $cfg['Server']['socket'];
     
        if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) {
            $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0;
            // always use CLIENT_LOCAL_FILES as defined in mysql_com.h
            // for the case where the client library was not compiled
            // with --enable-local-infile
            $client_flags |= 128;
        }
     
        if (empty($client_flags)) {
            $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect';
            $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password);
        } else {
            if ($cfg['PersistentConnections']) {
                $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags);
            } else {
                $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags);
            }
        }
     
        if (empty($link)) {
            PMA_auth_fails();
        } // end if
     
        PMA_DBI_postConnect($link, $is_controluser);
     
        mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
        mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
        return $link;
    }
    et

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function PMA_DBI_connect($user, $password, $is_controluser = FALSE)
    {
        global $cfg, $php_errormsg;
     
        $server_port   = (empty($cfg['Server']['port']))
                       ? FALSE
                       : (int) $cfg['Server']['port'];
     
        if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
            $cfg['Server']['socket'] = '';
        }
     
        // NULL enables connection to the default socket
        $server_socket = (empty($cfg['Server']['socket']))
                       ? null
                       : $cfg['Server']['socket'];
     
        $link = mysqli_init();
     
        mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);
     
        $client_flags = $cfg['Server']['compress'] && defined('MYSQLI_CLIENT_COMPRESS') ? MYSQLI_CLIENT_COMPRESS : 0;
     
        $return_value = @mysqli_real_connect($link, $cfg['Server']['host'], $user, $password, FALSE, $server_port, $server_socket, $client_flags);
     
        if ($return_value == FALSE) {
            PMA_auth_fails();
        } // end if
     
        PMA_DBI_postConnect($link, $is_controluser);
        mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
        mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
        return $link;
    }
    Bonjour
    j'ai le meme probleme mais avec les carracteres arabes.
    quand jesaisiun nom arabe il m'affiche l'erreur suivante"data too long for nom" nom c'est le nom du chap
    SVP aidez moi

  18. #18
    Membre expérimenté Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Par défaut
    Citation Envoyé par SuperCed Voir le message
    Ok, c'est bon, j'ai la solution.

    J'ai ajouté 2 lignes dans les fichiers dbi contenus dans le répertoire librairies/dbi/

    Voici les lignes pour chaque fichier :
    dans mysql.dbi.lib.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
        mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
    [...] (écourté pour pas poluer) [...]
    Merci beaucoup, j'ai ajouté ces ligne et YOUPII ça MARCHE !!

    Merci pour cette astuce depuis le temps que je me disait que phpMyAdmin fesait ***** a pas vouloir faire du vrai utf-8 !

    Encore merci !

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

Discussions similaires

  1. [DOM] Problème d'encodage UTF-8
    Par Valter dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/05/2008, 15h32
  2. problème d'encodage ISO /UTF
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 9
    Dernier message: 09/04/2008, 18h48
  3. Problème d'encodage UTF-8
    Par Shugo78 dans le forum Ubuntu
    Réponses: 0
    Dernier message: 23/11/2007, 19h40
  4. [MySQL] Problème d'encodage UTF-8
    Par cloridriks dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/10/2007, 11h19
  5. Problème d'encodage en UTF-8
    Par navis84 dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2006, 11h19

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