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 :

[UTF-8] Pourquoi utiliser utf8_encode() alors que la page web et la DB sont en utf8 ?


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut [UTF-8] Pourquoi utiliser utf8_encode() alors que la page web et la DB sont en utf8 ?
    Bonjour,

    pensant bien faire, j'ai créé une table classique en utf8 :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `bien` (
      `id` MEDIUMINT unsigned NOT NULL auto_increment,
      `titre` VARCHAR(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1;

    Pourquoi dans une page XHTML utf8, je suis obligé d'utiliser utf8_encode() pour afficher correctement le texte contenu dans cette table ?
    Je pensais que le faite d'enregistrer les data en utf8 cela m'éviterai de devoir de encoder... nan ?
    Quelqu'un pourrait-il m'éclairer SVP ?
    Merci d'avance

    @bientôt

  2. #2
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Cela devrait fonctionner.
    Que met tu dans la page XHTML pour qu'elle comprenne le UTF-8

    Perso j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html xml:lang="zh-CN" lang="zh-CN" .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    le tout avec un DOCTYPE en XHTML 1.0 strict. (zh-CN c'est parce que j'affiche du chnois mais avec le Locale francais cela devrait etre bon aussi)

  3. #3
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Est ce que les pages php qui enregistre des données dans ta base sont bien encodé en utf8 aussi? Ca m'arrive souvent ce genre de problème...

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Voici mon header stunti :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <title>Mon titre</title>
     
    <meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
    la page est bien encodée en utf-8... ne me dit pas que c'est à cause de mon charset=utf-8" en minuscule !


    Asmodean, à vrai dire y a pas encore d'insertion via php...
    ma base et le contenu ont été créé via un copier/coller du contenu d'un *.sql en utf8...

  5. #5
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Et la page php qui lit les données à quelle encodage?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    J'ai eu ce problème: tout en utf-8: les scripts php, la base, la déclaration xhtml... et je recevais les données de ma base en iso...
    Je crois que c'est au niveau des serveurs que ça se converti, ne me demande pas...
    perso, j'ai trouvé ça, à mettre sous la requête de connexion sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query('SET NAMES utf8') ;
    Chez moi ça fonctionne parfaitement, et tu ne devras pas tout utf8-encoder

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Merci BlindeKinder, ça semble bien fonctionner...


    mais je trouve bizarre voir anormal de devoir utiliser cela.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    J'avais exactement le même problème : table neuve créée en UTF8, insertions propre faites à la main directement dans phpmyadmin, pages en UTF8 avec charset déclaré UF8 dans le code html, ... bref tout ce qu'il fallait à priori non ?

    Et bien ce petit code mysql_query('SET NAMES utf8') ; placé en dessous de ma fonction de connexion à la BDD marche également chez moi.

    Mais est-ce que ça alourdit un peu la requête ou c'est simplement un paramètre que l'on donne à MySQL ?

    Cette astuce est-elle correcte alors que je suis sur un mutualisé 1&1 : ça m'étonne que sur les serveurs 1&1 ils ne gèrent pas bien ça, non ??

    Je vous remercie pour toute piste et réponse .

  9. #9
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    je suis toujours curieux de connaître le pourquoi ....


  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Le problème vient du fait que la définition de l'encodage des caractères apparait à plusieurs niveaux lors de l'envoi d'une requête et de la réception du résultat entre un client et un serveur mySQL. Pour plus d'informations sur ce processus voir le manuel officiel mySQL au chapitre : Jeux de caractères et collations de connexion.

    Il est dit que la commande "SET NAMES" indique au serveur dans quel encodage les futures requêtes seront fournies par le client; dans notre cas on indique qu'il sagit de "utf8" c'est pourquoi le serveur renvoi les résultats correctement dans le même encodage (ce qui n'est pas obligatoire suivant la configuration du serveur).

    Maintenant une solution intéressante serait de pouvoir configurer le client sans avoir à renvoyer la commande "SET NAMES" à chaque nouvelle session entre le client et le serveur mySQL. Si quelqu'un a la réponse pour le package DB de PEAR je suis preneur car j'ai exactement le même soucis.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    J'ai peut être un élément de réponse :certains drivers odbc ne supportent pas l'UTF8.

    MyODBC 3.51.x doesn’t support Unicode characters. So we just
    have to wait for MyODBC 5.0 Production.


    http://bugs.mysql.com/bug.php?id=3348

Discussions similaires

  1. page qui existe alors que var_dump($page) : length=0
    Par laurentSc dans le forum Langage
    Réponses: 4
    Dernier message: 24/12/2014, 04h49
  2. Pourquoi utiliser Iterator alors qu'on a foreach ?
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2014, 18h31
  3. code 500 retourné alors que la page s'affiche normalement
    Par johnny-57 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 6
    Dernier message: 06/09/2013, 16h13
  4. File_get_content timeout alors que la page existe
    Par loup-rouge dans le forum Langage
    Réponses: 14
    Dernier message: 06/11/2008, 23h09
  5. Réponses: 2
    Dernier message: 19/04/2007, 17h57

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