|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2011 Messages : 16 ![]() |
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 :
$bdd = new PDO('mysql:host=;dbname=', '', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 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 :
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 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. |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Développeur Web Inscription : mars 2007 Messages : 112 ![]() |
Bonsoir,
As-tu essayé un utf8_encode sur tes valeurs lors de l'enregistrement |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2011 Messages : 16 ![]() |
|
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Développeur Web Inscription : mars 2007 Messages : 112 ![]() |
Exactement, pour chaque valeur que tu vas enregistrer, tu utilise cette fonction
|
|
|
00
|
|
|
#5 | |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Citation:
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). |
|
|
|
00
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2011 Messages : 16 ![]() |
Bonjour,
merci pour vos deux réponses. J'ai testé en enlevant htmlentities() et a la place de é 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 :
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. |
||
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2011 Messages : 16 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com