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 :

Gestion caractères spéciaux


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut Gestion caractères spéciaux
    Bonjour.

    Je viens de migrer mon ensemble Apache 2.2.6 / PHP 5.2.3 vers Apache 2.2.18 / PHP 5.3.6.
    Et là, oh surprise, les caractères spéciaux ne sont plus gérés correctement. Lorsque je consulte les données dans la base MySQL, pas de soucis. Mais lorsque je demande à mes scripts PHP d'afficher le résultat des requêtes SQL, j'ai n'importe quoi.
    Je ne comprends pas ce qui s'est passé. Une idée ?

  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
    L'encodage de ta base de données a du changer.
    Si tu obtiens des é la base fourni de l'UTF8 et toi tu affiches en ISO
    Si tu obtiens des �, c'est l'inverse.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    L'encodage par défaut a peut être changé et l'encodage à utiliser n'est pas spécifié dans tes scripts php ?

    Tu dis que cela affiche n'importe quoi, mais quoi par exemple ?

  4. #4
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Par exemple j'ai des é à la place des é.
    Je ne précise aucun encodage dans mes pages HTML.
    Le jeu de caractère pour MySQL est a priori UTF-8 et ça n'a pas changé (je n'ai pas fait de mise à jour de ce côté-ci).

  5. #5
    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 ne précise aucun encodage dans mes pages HTML.
    fais le
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Pour passer en utf-8 il y a pas mal de tutos. Par exemple un premier ici.

  7. #7
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    J'ai ajouté la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    Ça ne change rien.

  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
    Citation Envoyé par scrouet Voir le message
    Le jeu de caractère pour MySQL est a priori UTF-8
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Ce n'est pas mieux en encodage utf-8. En fait j'ai écrit dans un fichier de logs ce que le script PHP reçoit de la base de données : ça n'est déjà pas bon. J'ai l'impression que c'est au niveau de l'exécution de la requête que ça coince.

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Tu as lu le tuto que je t'ai mis en lien ?
    Essayes de mettre
    SET NAMES "utf8";
    avant ta requête.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    sous mysql utilise mysql_set_charset
    sous mysqli utilise mysqli_set_charset
    sous pdo_mysql utilise le parametre charset dans le dsn (PHP 5.3.6) ou fait un SET NAMES (mais c'est pas le même effets)

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    sous mysql utilise mysql_set_charset
    sous mysqli utilise mysqli_set_charset
    Oui c'est recommandé mais (cf doc) ces fonctions requièrent MySQL version 5.0.7 ou supérieure.

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Oui c'est recommandé mais (cf doc) ces fonctions requièrent MySQL version 5.0.7 ou supérieure.
    ça commence a bien dater cette version
    c'est surtout que les fonctions là agissent en interne sur les autres (pour mysql_real_escape_string par exemple, qui ducoup prend le bon charset alors qu'avec SET NAMES il sera pas prit en compte)

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    ça commence a bien dater cette version
    c'est surtout que les fonctions là agissent en interne sur les autres (pour mysql_real_escape_string par exemple, qui ducoup prend le bon charset alors qu'avec SET NAMES il sera pas prit en compte)
    Ben oui mais y'a quelques mois j'ai voulu updater tous mes sites avec ces fonctions et j'ai dû y renoncer pour deux d'entre eux car la version mysql sur un mutualisé était encore 5.0.3. C'est pour cela que je précise de faire attention

    Pour le reste je savais que ces fonctions étaient recommandées par rapport à SET NAME mais je ne savais pas exactement pourquoi. Merci de la précision

  15. #15
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Bon, si je résume ce que j'ai compris, il faut que j’homogénéise mes jeux de caractères entre ma base de données, mes scripts et mes pages Web.
    Du coup, deux questions :
    1. Sachant que mes sites sont très majoritairement en français et qu'il n'y a pas de langues non européennes, ne serait-il pas plus pertinent de me contenter du jeu de caractères ISO-8859-15 ?
    2. Comment dois-je procéder pour faire cette homogénéisation ?

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par scrouet Voir le message
    Sachant que mes sites sont très majoritairement en français et qu'il n'y a pas de langues non européennes, ne serait-il pas plus pertinent de me contenter du jeu de caractères ISO-8859-15 ?
    non utf-8 partout, il n'y a aucun intérêt a travailler en iso-8859-1 sachant que l'utf-8 comprend tout ces caractères

    il faut bien mettre tout tes table en utf-8, ainsi que tes entete html (content-type/charset) et aussi tes fichiers doivent être en utf-8 (a régler dans ton éditeur), pour finir ton serveur doit envoyer les en tetes de pages en utf-8 tu dois aussi faire comme AB t'as dis au niveau de ta connexion mysql, si tu respecte tout ça tu n'aura plus de probleme d'encodage et tu seras dans la "norme" actuelle

  17. #17
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Je rejoins stealth35, pendant que tu te penche sur l'encodage autant utiliser la norme actuelle qui est l'utf-8. D'ailleurs pas mal de fonction php requièrent l'utf8 comme json_encode etc
    Et puis même si tes sites sont en français ça te permet de mélanger plusieurs langues dans un même document, ce qui te permettra donc de dire que bonjour s'écrit こんにちは en japonais

  18. #18
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Bon. Je pense avoir suivi toutes les étapes du tuto mentionné plus haut :
    • J'ai ajouté le tag meta correct au début des fichiers HTML.
    • J'ai enregistré mes fichiers en UTF-8 (avec PSPad).
    • J'ai ajouté "AddDefaultCharset utf-8" à la fin du fichier hhtpd.conf et j'ai redémarré mon serveur.
    • J'ai modifié ma base de données via phpMyAdmin.
    • J'ai ajouté "charset=utf-8" à la fin de mon DSN (j'utilise PDO pour la connexion à la base de données).

    Mais ça ne suffit pas. Aurais-je fait quelque chose de travers ?

  19. #19
    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
    Tu as changé l'encodage de mysql ? Tu as essayé avec SET NAMES ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par scrouet Voir le message
    J'ai ajouté "charset=utf-8" à la fin de mon DSN (j'utilise PDO pour la connexion à la base de données).
    Mais ça ne suffit pas. Aurais-je fait quelque chose de travers ?
    le charset c'est uniquement à partir de la 5.3.6 (en espérant que t'as la bonne version)

Discussions similaires

  1. [AJAX] Gestion des caractères spéciaux
    Par CrazySeb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/05/2007, 09h43
  2. [MySQL] Gestion des caractères spéciaux dans un update
    Par olivier94 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/03/2007, 17h13
  3. Gestion des caractères spéciaux (micro)
    Par MiJack dans le forum Delphi
    Réponses: 7
    Dernier message: 19/01/2007, 22h41
  4. Réponses: 1
    Dernier message: 18/01/2007, 14h24
  5. Gestion des caractères spéciaux
    Par claralavraie dans le forum Oracle
    Réponses: 1
    Dernier message: 22/06/2006, 14h41

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