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

Langage PHP Discussion :

Problème d'encodage UTF8 PHP & MySQL


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Problème d'encodage UTF8 PHP & MySQL
    Bonjour à tous,


    cela fait plusieurs heures que je suis bloqué sur l'encodage de mes caractères.
    En effet, il me faut enregistrer des infos sur des clients comme leur nom et prenoms depuis un formulaire, et dans une BDD MySQL.

    C'est pourquoi j'ai besoin d'un encodage UTF8.

    -Toutes les pages de mon site sont encodées en UTF8 (j'utilise Wordpress et il est configuré par défaut en UTF8)
    - Toutes les pages "_post" (envois de requêtes PHP) sont encodées en "AINSI as UTF8" selon N++ (sans BOM). (j'ai essayé en UTF8 pur mais ca ne marche pas mieux)
    - Ma base de donnée, mes tables, et tous les champs sont en utf8_general_ci. Sans exception.
    - Lors de la connexion à ma BDD via PDO je renseigne l'argument suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd = new PDO('mysql:host=;dbname=', '', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    J'ai également essayé en ne faisant qu'une simple requête SET NAMES après la connexion, sans succès.

    Resultat :

    Lorsque j'écris un 'é' dans le champ 'nom' de mon formulaire, Phpmyadmin affiche 'é'. Pourtant si je modifie directement le champ via un UPDATE dans myadmin, le 'é' est prit en compte.

    Ce qui prouve que le problème n'est PAS la BDD.

    J'utilise htmlidentities() avec pour argument UTF-8, et lorsque je fais un 'echo $nom' dans ma page formulaire_post.php qui envoie les requetes a ma BDD, le navigateur m'affiche bien 'é'.

    Ce qui prouve que le problème n'est PAS le code php.

    Mon doctype est en XHTML Strict et j'utilise bien la balise meta suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    Ce qui prouve que le problème n'est PAS le XHTML.

    Il ne reste plus que l'envoi de requête via PDO, pourtant, comme je l'ai dis plus haut j'utilise SET NAMES à chaque connexion.

    Pour finir, je certifie avoir bien lu votre F.A.Q dédié a ce problème :
    http://php.developpez.com/faq/sgbd/?...ql#mysql-utf-8

    Il ne m'a néanmoins été d'aucun secours.


    En espérant que vous trouverez mon erreur... Merci.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Points : 200
    Points
    200
    Par défaut
    Bonsoir,

    As-tu essayé un utf8_encode sur tes valeurs lors de l'enregistrement

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par yasen77 Voir le message
    Bonsoir,

    As-tu essayé un utf8_encode sur tes valeurs lors de l'enregistrement
    C'est à dire ? Tu parle lors de la requête SQL ? Il faudrait que je fasse utf8_encode($nom) dans la requete préparée ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Points : 200
    Points
    200
    Par défaut
    Exactement, pour chaque valeur que tu vas enregistrer, tu utilise cette fonction

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par gogetenk Voir le message
    Lorsque j'écris un 'é' dans le champ 'nom' de mon formulaire, Phpmyadmin affiche '&eacute;'. Pourtant si je modifie directement le champ via un UPDATE dans myadmin, le 'é' est prit en compte.
    ...

    Citation Envoyé par gogetenk Voir le message
    J'utilise htmlidentities() avec pour argument UTF-8, et lorsque je fais un 'echo $nom' dans ma page formulaire_post.php qui envoie les requetes a ma BDD, le navigateur m'affiche bien 'é'.
    Donc ce n'est nullement une erreur d'encodage. L'erreur c'est d'utiliser htmlentities ainsi (ie utiliser htmlspecialchars à l'affichage et non à l'insertion - ne pas perdre de vue que injection SQL != XSS).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    merci pour vos deux réponses.
    J'ai testé en enlevant htmlentities() et a la place de &eacute; j'ai des é (SEULEMENT dans PMA, pas lorsque j'affiche en PHP)
    Problème d'encodage donc ?
    C'est pourquoi j'ai fais appel à utf8_encode() sur mes variables avant de faire ma requête, sans succès.

    Je récapitule :
    - BDD, tables et champs en utf8
    - Pages en utf8 sans BOM
    - J'utillise bien SET NAMES utf8 a chaque connexion
    - Charset en utf8
    - utf8_encode() sur chaque variable


    Voici mon code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <!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" >
     
    <head>
    	<title>Formulaire post</title>
    	<meta http-equiv="content-type" 
    		content="text/html;charset=utf-8" />
    </head>
     
    <body>
     
         <?php
     
    $nom= utf8_encode($_POST['nom']);
    $prenom= utf8_encode($_POST['prenom']);
    $email= utf8_encode($_POST['email']);
    $sexe= utf8_encode($_POST['sexe']);
    $type= utf8_encode($_POST['type']);
    $nation= utf8_encode($_POST['nation']);
    $discipline= utf8_encode($_POST['discipline']);
    $hebergement= utf8_encode($_POST['hebergement']);
     
    // Connexion à la base de données
     
    		mysql_connect("XXX", "XXX","XXX") or die("Erreur de connexion au serveur");
    	mysql_select_db("XXX") or die("Erreur de connexion à la base de donnée");
    		mysql_query("SET NAMES utf8");	
     
        // Insertion des infos à l'aide d'une requête 
    	$sql = "INSERT INTO tournoi2 (nom, prenom, email, sexe, type, nation, discipline, date_inscription) VALUES('$nom', '$prenom', '$email', '$sexe', '$type', '$nation', '$discipline', NOW())";
    		mysql_query($sql) or die('Erreur SQL ! <br>'.$sql.'<br>'.mysql_error());
     
     
    			// On cherche l'id de la personne en question afin de la mettre dans un cookie
    			$sql2 = "SELECT `id` FROM `tournoi` WHERE nom='$nom' AND prenom='$prenom' ";
    			$req = mysql_query($sql2) or die('Erreur SQL ! <br>'.$sql2.'<br>'.mysql_error());
     
    			// On met l'ID dans une variable
    			$id = mysql_fetch_array($req);
     
     
        // Redirection du visiteur vers la page de confirmation ou d'hebergement
    		if ( $hebergement = 'oui' ) {
     
    			//On fait un cookie pour identifier l'utilisateur dans le formulaire d'hebergement
    		    setCookie("inscription-tournoi", $id['id'] , time()+3600, null, null, false, true);
    			//On redirige vers l'inscription a un hotel
    			header('Location: inscription-a-un-hotel');
     
     
    		} else { 	
     
    			//On redirige a la page de confirmation
    			header('Location: confirmation-de-linscription');
    		}
     
    ?>
     
    </body>
    </html>

    Je suis en stage et la deadline approche... Je commence a désespérer ça fait deux jours maintenant que je suis dessus...

    Help


    EDIT : J'ai testé en enlevant SET NAMES, en enlevant le charset, et en encodant la page en UTF8 pour et en AINSI, aucune différence. Toujours les mêmes caractères.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Le problème venait du fait que mes variables étaient encodées deux fois à cause de utf8_encode() et du charset en ut8.

    Du coup cela revenait à écrire en ISO...

    Merci à tous et surtout Julp pour m'avoir aidé a trouver via MP.

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

Discussions similaires

  1. [Oracle] problème d'encodage Oracle <-> PHP
    Par matoon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/11/2010, 17h36
  2. Problème d'encodage (utf8)
    Par s0ak68 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/01/2008, 14h21
  3. Problèmes d'encodage utf8
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/09/2007, 16h32
  4. [MySQL] Problème d'encodage utf8
    Par tomix81 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/07/2007, 22h31
  5. Problème d'encodage UTF8
    Par vg33 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 19h28

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