Salut a tous !


J'ai regarder pas mal de forum sur l'encodage utf8 pour voir si y'avais pas le même problème que moi, ben j'ai pas trouvé...

Mon index est encodé en utf8
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />



mon iframe (appeler dans mon index) est encodé en utf8 aussi
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />



Ma base de données est encodé en utf8
Ma table de la bdd est encodé en utf8
LE CHAMP de MA TABLE de MA BDD est encodé en ut8


Ma requete est encoder en utf8
$dbh = new PDO($this->dsn, $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));



ET SA CONTINUE à me sortir des caractère bizarre

alors je vois pas d'où peut venir mon problème... un peu d'aide ?


EDIT : Les caractère bizarre se trouve dans un formulaire dans mon iframe.
Modifié par JuseN (10 Jul 2012 - 14:48)
Et quels sont les en-têtes HTTP retournés par votre serveur ?

Avez-vous une URL à nous mettre sous la dent, histoire de tester ? Smiley smile
Le site est encore en test sur une adresse bidon ...

http://www.sonorisation-portable.net/


...


Les données qui viennent de la base de données sont uniquement celle des produit (le texte) qui écrit des caractère bizarre..

Que je rentre avec ou sans PHPMyAdmin, les informations ressorte en caractère spécial, par exemple si je remplce (dans PHPMYADMIN) le ?@ par un é, et que je reviens dans mon formulaire ça reste en caractère spécial...
Hello,

Déjà tu as un certain nombre de fichiers PHP enregistrés en UTF-8 avec BOM, il faudrait les enregistrer en UTF-8 sans BOM. (Tu travailles avec Notepad++?)

Ensuite, certaines données sont retournées dans le code HTML ainsi:
livr&Atilde;&copy;e
(pour "livrée")
Deux pistes qui peuvent expliquer ce problème:
1. Tu as dans ta base le texte "livré" et tu appliques en prime une fonction PHP qui remplace les caractères non-ASCII par les entités caractères équivalentes.
2. Tu as dans ta base le texte "livr&Atilde;&copy;e".
Dans les deux cas tu as probablement des données corrompues en base.
Salut

Bah enfaite j'avais tous mes fichier (converti avec notepad++ en UTF8 SANS BOM, et sa changer rien, du coup j'ai tester AVEC BOM, enfin... en utf8 normal..)

Enfaite dans ma BDD, si je tape un mot à la main, avec le bon accent, cela s'affichera quand même avec un caractère bizarre... ce que je comprend pas car là où doit s'afficher le texte il y à une balise comme indiqué précédemment, avec utf8.. après ma BDD entière est en UTF8 que ce soit les table, les champs ou la base elle même.


J'ai pas de fonction PHP qui remplace les caractère.. et je ne pence pas avoir de données corrompues en base.

je développe avec DreamWeaver (pas le choix, imposer par mon boss).
Pour tes fichiers, il faut rester en UTF-8 sans BOM.

JuseN a écrit :
Enfaite dans ma BDD, si je tape un mot à la main, avec le bon accent, cela s'affichera quand même avec un caractère bizarre...

On ne tape pas un caractère ou un mot directement dans une base de données. Pour enregistrer des données dans une base, il faut passer par un client. En l'occurrence j'imagine que tu parles de phpMyAdmin? Attention avec ce dernier: selon la manière dont il est configuré, il peut t'afficher un résultat qui ne correspond pas à tes données (notamment si la connexion entre phpMyAdmin est dans un codage différent des données en base).

JuseN a écrit :
et je ne pense pas avoir de données corrompues en base

Tu as vérifié? (Par exemple en faisant un export de ta base, en demandant de l'UTF-8 pour l'export.)
Merci de m'aider!


Oui je parlais de PHPMyAdmin quand j'ai dit " je tape un mot a la main ".

Je viens de faire un export de ma table en question, en utf8 et tout est correct, pas de caractères bizarres...


et j'ai re-convertis toutes mes pages en UTF8 sans BOM. le problème persiste...
TROUVER ! je suis un nul, lors de l'écriture de ma donnée (mon echo) le seul endroit où j'aurais du regarder ben je l'ai pas fait, bref lors de l'écriture j'avais

echo htmlentities($data['NOM_PRODUIT']);


bref, je ne savais pas, car on m'avait conseiller de le mettre justement pour pas avoir ce problème.. je remercierais la personne en face.


En tous cas merci de m'avoir aider, merci beaucoup.


Cordialement,
echo htmlentities($data['NOM_PRODUIT']);

Deux problèmes ici:
1. Tu n'as pas besoin de htmlentities si tu travailles en UTF-8. (La personne qui t'as conseillé était de bonne foi mais n'a pas remis ses connaissances à jour, on n'est plus en 1999. Smiley cligne )
2. htmlentities travailles par défaut en ISO-8859-1 (sauf à partir de PHP 5.4 où c'est en UTF-8), du coup quand il reçoit deux octets pour le caractère "é" il estime que ce sont les caractères "é" et les convertit en "&Atilde;&copy;". Il faudrait passer un paramètre de codage pour demander à la fonction de travailler en UTF-8 (ou ne pas utiliser htmlentities du tout, cf. le premier point).