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

Outils MySQL Discussion :

[PHP/MySQL] Problème d'encodage


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut [PHP/MySQL] Problème d'encodage
    Bonjour, je débute plus ou moins en base de données et php, j'ai un site assez simple où j'enregistre des textes avec un formulaire XHTML qui sont envoyés dans la base de données puis réaffichés en PHP.

    La base de données est celle fournie avec un espace perso Free. Après avoir lu plusieurs avis, j'ai choisi d'enregistrer dans la base de données le texte brut puis de convertir avec les caractères spéciaux HTML seulement à la lecture des tables.

    Le problème est que lors de l'envoi du texte (l'enregistrement dans la table) certains caractères spéciaux sont transformés
    j'entre ceci dans le formulaire :
    é è à ç
    dans mon code php la variable $texte réaffiche ces mêmes caractères, par contre lorsque je vais lire la base de données (à partir d'un autre code php, et sur le site de gestion en ligne phpmyadmin.free.fr) c'est ceci qui est affiché (sans les espaces sur le code html) :
    é & #232 ; & #224 ; ç

    voici la portion de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "Texte : $texte";
    $cmd = "REPLACE INTO db_news(date,texte) VALUES('$date','$texte')";
    if(!($result = mysql_query($cmd)))
    sachant que l'echo de la variable $texte m'affiche correctement les lettres, c'est seulement dans la base de données qu'elles sont modifiées.

    Merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Par défaut
    essaye ça:
    utf8_decode() lors de la lecture

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    quel est le jeu de caractères de ta page ?

    comment visualises-tu ce qu'il y a dans ta base ? est-ce que ce ne serait pas juste un mauvais réglage de phpMyAdmin ?

  4. #4
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Pour la page c'est ça :
    <meta http-equiv="content-type" content="text/html; charset=windows-1250" />
    Honnètement je ne sais pas trop à quoi ça correspond comme encodage ^^

    Pour ce qui est du visionnage, j'ai le même résultat en récupérant le texte par PHP/MySQL qu'en visionnant sur le site en ligne.
    Par contre je vois qu'il y a une erreur dans le sujet dsl, le résultat visionné a été converti là. Ce que je vois c'est ça (sans les espaces sur le code html) :
    é & #232 ; & #224 ; ç

    Hum donc j'ai un peu mal formulé le problème, même si je suppose que ça tourne autour de l'encodage. Certains caractères (ici è et à) sont convertit en HTML alors que je n'utilise plus la fonction htmlentities() AVANT d'envoyer dans la base de données.
    Et j'ai cherché un peu mais je ne vois nulle part dans phpMyAdmin une option qui puisse être en rapport :/

  5. #5
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Bon je n'arrive pas à trouver pourquoi les caractères sont (partiellement) convertis en code HTML.

    Etant donné que le texte récupéré passe par htmlentities(), le code HTML ressort avec le '&' convertit en "& amp ;".
    Solution bricolage que je viens de trouver remplacer "& amp ;" par le caractère '&' à nouveau pour que les caractères s'affichent avec le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = str_replace("&amp;", "&", $texte);
    Cependant je serais curieux de savoir pourquoi cette conversion au sein de la base de données, je souhaitais à la base stocker tout le texte sans HTML.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Citation Envoyé par YoniBlond
    Pour la page c'est ça :
    <meta http-equiv="content-type" content="text/html; charset=windows-1250" />
    Honnètement je ne sais pas trop à quoi ça correspond comme encodage ^^
    ça doit être ce que MySQL appelle cp850, décrit comme "Windows Central European". Les jeux Central European correspondent à l'alphabet latin avec les accents utilisés pour les langues slaves, Č, ž et consorts...

    Si ça ne correspond pas à ce que tu veux, je ne peux que t'inciter à utiliser un jeu plus adapté, latin-1 ou UTF-8.
    Citation Envoyé par YoniBlond
    Pour ce qui est du visionnage, j'ai le même résultat en récupérant le texte par PHP/MySQL qu'en visionnant sur le site en ligne.
    Par contre je vois qu'il y a une erreur dans le sujet dsl, le résultat visionné a été converti là. Ce que je vois c'est ça (sans les espaces sur le code html) :
    é & #232 ; & #224 ; ç

    Hum donc j'ai un peu mal formulé le problème, même si je suppose que ça tourne autour de l'encodage. Certains caractères (ici è et à) sont convertit en HTML alors que je n'utilise plus la fonction htmlentities() AVANT d'envoyer dans la base de données.
    Et j'ai cherché un peu mais je ne vois nulle part dans phpMyAdmin une option qui puisse être en rapport :/
    Que tu les vois sur ta page n'implique pas qu'ils soient dans ta BDD... tu peux vérifier avec CHARACTER_LENGTH() et ORD() le contenu exact de ta base.

    Ton htmlentities à l'affichage peut produire ce genre d'erreurs : en effet, htmlentities utilise par défaut le latin-1 (ISO-8859-1), et ne va pas forcément encoder correctement en windows-1250. Dans PHP5, tu peux préciser le jeu à utiliser dans htmlentities.

    Si ces caractères mal affichés l'ont été dans des champs de formulaire, puis renvoyés au serveur MySQL, cela peut expliquer la présence de code HTML dans la base.

  7. #7
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Non le HTML et le formulaire n'y est pour rien car comme je le montre dans le bout de code, j'ai testé le contenu de ma variable PHP juste avant d'envoyer la requête SQL et le texte était normal.
    De plus il ne s'agit pas d'un mauvais affichage suite à un encodage, mais plutôt de la conversion en caractère HTML lors de l'écriture dans la base de données.

    Peut être que le problème vient plutôt de phpmyadmin que d'autre chose :/

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

Discussions similaires

  1. [MySQL] Php/mysql problème débutant !
    Par hazaki dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 26/12/2011, 17h01
  2. Réponses: 3
    Dernier message: 13/04/2007, 19h43
  3. [MySQL] Problème d'encodage / transfert de base de données
    Par Theberge43 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/01/2007, 18h21

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