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 :

Quel charset pour les caractères accentués [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Quel charset pour les caractères accentués
    Bonjour,

    j'utilise un script PHP pour rentrer mes données sur MySQL. Mais elles s'affichent par exemple comme cela dans MySQL : " L'école à " toto voulant dire " L'école à toto ".
    En PHP j'utilise les fonctions trim(), addslashes() et htmlentities() avant de mettre ses données dans ma table.
    La config que j'ai :

    • Editeur de texte NotePad++ encoder en format ANSI
    • Dans mon script PHP je ne spécifie pas de charset
    • Pour l'affichage de mes données dans ma page HTML, je ne spécifie pas de charset

    Je pense que le problème vient de l'insertion des données dans ma table car les données ne sont pas affichés comme je souhaite.

    Merci

  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
    Par défaut
    C'est le but de htmlentities() : convertir les caractères "spéciaux" en entités HTML.
    Il n'y a pas lieux de l'utiliser sur des données insérer dans une base.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Si j'enlève la fonction htmlentities() lors de mon insertion dans MySQL j'obtiens

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    * Editeur de texte NotePad++ encoder en format ANSI
    * Dans mon script PHP je ne spécifie pas de charset
    * Pour l'affichage de mes données dans ma page HTML, je ne spécifie pas de charset
    ben justement tu devrais peut-être. Ça éviterait ce genre de problème.

    quel interclassement pour la base de données ?



    sinon perso je mets utf8_bin

    [edit] tu peux mettre notepad++ sur encodage "utf-8 sans bom"

    puis dans ma page php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php echo '<?xml version="1.0" encoding="utf-8"?>' ?>
    <!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-fr" lang="fr-fr" >
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    </head>
    <body>
     
    </body>
    </html>
    et en cas de souci d'affichage je rajoute avant mes requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SET NAMES 'utf8'");

  5. #5
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    quel interclassement pour la base de données ?
    utf8_general_ci

    J'ai essayé de mettre mes pages au format UTF8 sans BOM et inclure la balise meta dans mes pages mais lorsque j'insère "L'école à toto" j'obtiens "L'&Atilde;&copy;cole &Atilde;&nbsp; toto"

    Mon pb vient bien du fait que je sois en ISO pour mettre mes données alors que mes tables sont en UTF8.

  6. #6
    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
    Par défaut
    L'interclassement n'intervient pas dans le format des données.
    Tu dois par contre toujours retirer htmlentities().

    Il serait vraiment plus simple que tu uniformises l'encodage de ta page HTML, des tes fichiers PHP et de ta base.
    Sinon i lfaut jouer avec utf8_encode(), utf8_decode().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Tu dois par contre toujours retirer htmlentities().
    Je croyais qu'il était bien de mettre cette fonction pour éviter que des injections SQL par des <script> ?

    Il serait vraiment plus simple que tu uniformises l'encodage de ta page HTML, des tes fichiers PHP et de ta base.
    De mettre mon site en UTF 8 est une bonne solution ?
    Je vais donc :

    • mettre dans .htaccess : AddDefaultCharset utf-8
    • enregistrer toutes mes pages en UTF8 sans BOM

    Et pour afficher dans mes pages des caractères accentués j'utilise : &eacute; , &agrave; ....

  8. #8
    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
    Par défaut
    Je croyais qu'il était bien de mettre cette fonction pour éviter que des injections SQL par des <script> ?
    Une injection SQL consiste à detourner une requête, on se prémuni en utilisant des fonctions comme mysql_real_escape_string()
    Ca c'est une injection javascript.
    Pour t'en premunir tu peux déjà nettoyer la chaine avec strip_tags() avant de l'insérer.
    Ensuite au moment de l'affichage tu peux utiliser htmlentities.

    Et pour afficher dans mes pages des caractères accentués j'utilise : &eacute; , &agrave; ....
    Il n'y a pas de raison : si tout est harmonisé, tu peux saisir les caractères accentués dans ton fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Je viens d'essayer d'uniformiser mes pages en UTF8.
    Lorsque je fais un echo de ma variable, dans mon script PHP, je vois "L'école à toto" mais dans la base de données "
    L'école à toto". Mais si je fais un utf8_decode("L'école à toto") en faisant un echo je vois "L'�cole � toto" et dans ma base de données "L'école à toto".
    Donc le comportement avec la fonction utf8_decode() est celui que je recherche. En regardant la description de cette fonction il est dit
    Convertit une chaîne UTF-8 en ISO-8859-1
    donc j'en déduis que c'est ma base de données qui n'est pas au bon format. Pourtant quand je vais dans PHPMyAdmin, onglet Operation de ma table il est noté dans interclassement utf8_general_ci ?

    Merci

  10. #10
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    Tu as eu dans ce fil toutes les indications nécessaires

    Il vaut mieux te lancer directement avec utf-8 car la version 6.0 de mysql sera par défaut en utf-8

    je te conseille un peu de lecture qui te permettra peut-être de comprendre ton problème

    http://dev.mysql.com/doc/refman/5.0/...-metadata.html

  11. #11
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    En faite j'ai remarqué que les données étaient stockées correctement et lorsque je souhaite les afficher elles apparraissent avec les caractères accentués. Le problème vient de l'affichage de ces données dans PHPMyAdmin qui comporte un bug : elles sont affichées en ISO

    Merci de votre aide

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

Discussions similaires

  1. [HTML] Encodetype HTML pour les caractères accentués
    Par danathane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/08/2007, 15h25
  2. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  3. Quel avenir pour les outils de génération de code ?
    Par Bruno75 dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 05/11/2003, 18h30
  4. Quel Outil pour les applis Industrielles ET bases de données
    Par ThierryAIM dans le forum Débats sur le développement - Le Best Of
    Réponses: 8
    Dernier message: 23/04/2003, 09h14
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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