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 :

caractères  rencontrés par MySql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Par défaut caractères  rencontrés par MySql
    Bonjour,


    Voilà j'avais le problème suivant : dans ma page php les caractères  s'affichaient plusieurs fois, j'avais donc parcouru le forum et pu corriger cela en modifiant l'encodage des caractères.

    en effet après avoir lu cette page : http://french.joelonsoftware.com/Articles/Unicode.html (trouvée sur le forum d'ailleurs), j'avais décidé de tout mettre en utf-8 et effectivement cela a réglé le problème.

    C'est à dire que ma bdd mysql est en utf-8, mes fichiers php sont en utf-8 et j'ai pris le soin d'ajouter à mes fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\">
    Puis quelques jours et lignes de codes plus tard, je me rend compte qu'une requete ne fonctionne plus. Surpris j'essaie de comprendre pourquoi.

    cette requete fait un count et doit normalement renvoyer 12 or je récupère 0.

    je fais un echo de ma requête dans mon fichier php qui affiche sur ma page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ FROM table;
    je décide d'aller dans phpmyadmin, et de copier la requete dans la partie "SQL" pour l'executer, et là surprise ! on m'affiche cette erreur :

    [CODE#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT champ FROM table
    [/CODE]

    visiblement les caractères  se trouvent juste devant mon SELECT, pourtant ils n'apparaissement pas sur la page web, ni dans le cadre de l'onglet "SQL" de phpmyadmin destiné a recevoir du code SQL, mais si je copie colle la requete de la page web vers le bloc notes effectivement je vois un carré devant mon select.

    N'y aurait il pas du avoir une erreur mysql affichée puisque mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = mysql_query($req) or die("Erreur mysql dans la requête de récupération du nombre d'équipes : ".mysql_error()."<br>\n" );
    Evidemment ma requete sans  testée sous phpmyadmin marche...

    Après d'autres recherches, en fait a chaque fois ma requête est encadré de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete
    en changeant l'encodage des fichiers de utf-8 à utf-8 sans BOM ça donne :

    ils restent toujours ces deux  à la fin de la requête qui font foirer !!!


    Donc si j'ai bien compris mysql reçoit une requête codé en utf-8 et comme lui il doit s'attendre à un autre encodage alors les caractères  apparaissent et font foirer la requête.

    bref je sais plus trop quoi faire, je suis ouvert à toute proposition

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Par défaut
    bon à force de chercher j'ai fini par trouver, certains diront que j'avais pas assez cherché et que j'ai direct poser la question sur le forum, bref je pense que la réponse ne se trouvant pas sur le forum mon sujet s'averera finalement utile...

    donc venons en à la solution :

    je pense que mysql ne s'attends pas à de l'utf-8, j'ai donc cherché un moyen de transformer l'encodage de la requete que je communique à mysql, pour cela la fonction miracle est utf8_decode(). petit exemple :

    avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req = 'SELECT champ FROM table';	
    $requete = mysql_query($req) or die("Erreur mysql dans la requête de récupération du nombre d'équipes : ".mysql_error()."<br>\n" );       
    while( $result = mysql_fetch_array( $requete ) )
    {
        $nbre_equipes = $result["champ"];	
    }
    après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $req = 'SELECT champ FROM table';	
    $requete = mysql_query(utf8_decode($req)) or die("Erreur mysql dans la requête de récupération du nombre d'équipes : ".mysql_error()."<br>\n" );       
    while( $result = mysql_fetch_array( $requete ) )
    {
        $nbre_equipes = $result["champ"];	
    }
    mais après cela, un petit problème apparaît, en effet, dans les résultats récupérés, pour peu que le résultat contienne des accents en tout genre, alors là c'est l'orgie sur la page, sous firefox des losanges avec point d'interrogation apparaissent, sous I.E. des caractères asiatiques et autres...

    c'est logique puisqu'on affiche en utf-8 qqchose que l'on a récupéré sous un autre format, il suffit donc d'effectuer la transformation inverse : encoder en utf-8. La fonction est : utf8_encode(). exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( $result = mysql_fetch_array( $requete ) )
    {
        $nbre_equipes = utf8_encode($result["champ"]);	
    }
    voili voilou

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Salut, j'ai vu ta question et tu as l'air à avoir résolu ton problème. Je sais pas si tu peux me donner un coup de main. Moi les caractères  s'affiche entre le traitement de mes pages. C'est tu de quoi il pourrait s'agir ? BD en utf-8, mes pages interagissant avec la BD en utf-8 aussi.

    www.maximeplante.com quand tu arrive sur la page d'accueil ou quand tu va dans gallerie...(pages interagissant avec la BD)

    Merci

  4. #4
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Erreur de BOM :

    http://fr.wikipedia.org/wiki/Marque_...dre_des_octets

    Désactivable dans vos éditeur favoris

    (Merci de ne pas demander la même chose 15x)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Merci pour le lien mais pourriez vous me donner une réponse concrète...

    si l ' output buffering est désactivé, cela a pour effet subtil de faire que la page commence immédiatement à être envoyée au navigateur, et d'empêcher les custom headers d'être spécifiés par le script PHP


    comment désactiver le output buffering ?

    Que dois-je faire en concret ?

    Merci

  6. #6
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Pourquoi désactiver l'output buffering ?
    Le problème ne viens pas de PHP mais de votre éditeur de fichier qui sauvegarde les fichier au format UTF-8 BOM

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Ok cela veux dire que si j'utilisse web expert, il y a un moyen de sauvegarder en utf8 et non utf8 bom ?

  8. #8
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Utiliser Notepad++ => Format => UTF8 (Sans BOM) => Enregistrer
    et le tour et jouez ! Merci encore

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

Discussions similaires

  1. Caractère & remplacé par &amp; dans mysql
    Par Fullmetal63 dans le forum Langage
    Réponses: 4
    Dernier message: 16/09/2013, 13h19
  2. [Mail] Envoyé des caractères spéciaux par mail
    Par Oberown dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2006, 23h55
  3. caractères accentués en mysql 4.1.15
    Par lucdeg dans le forum Administration
    Réponses: 2
    Dernier message: 07/12/2005, 19h04
  4. [Mail] Envoie de caractère spéciaux par mail() ?
    Par Oberown dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 16h13
  5. Requete avec chaine de caractère commence par
    Par jazzes_dean dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/08/2004, 13h07

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