Page 1 sur 1

Accents et datalist

Posté : 05 janv. 2016, 19:34
par smashcfr
Bonjour,

Je suis confronté à un problème pour lequel je ne trouve pas grand chose sur internet.

Dans une page html5, tous les textes s'affichent bien (caractères normaux, accentués, etc...). Dans cette même page, les éléments accentués compris dans un datalist s'affichent sous la forme d'un point d'interrogation => Ce n'est pas normal.

Je ne pense pas que cela vienne des en-têtes, car sinon le reste du texte aurait le même problème (?). Pour plus de sécurité, j'ai ceci en début de page : "<meta charset="UTF-8">"

J'ai passé l'ensemble du source de la page en validation W3C (https://validator.w3.org/nu/#textarea) => "Document checking completed. No errors or warnings to show."

J'ai alors pensé à la base de données.
La table concernée a une collation en utf8_unicode_ci, le champ concerné aussi. A priori ok ? En tous cas dans PhpMyAdmin tout s'affiche normalement.
J'ai tenté une édition manuelle de l'entrée, et essayé de faire un update => Le pb demeure.
J'ai tenté de faire une insertion (par l'interface du site) dans une autre table, puis d'afficher la page sur le site. Ce n'est pas une datalist, mais un input type="text", et là tout s'affiche bien.

J'avoue que je ne comprends pas.. Quelqu'un aurait-il une idée ?

Merci bcp

(Nb : Je n'ai pas mis la source car peut être un peu longue, mais si besoin je la mettrai bien entendu.)

Re: Accents et datalist

Posté : 05 janv. 2016, 21:36
par @rthur
Bonjour,

Vérifie l'en-tête HTTP de ta page (en faisant un Ctrl+i dans firefox, puis onglet réseau).
Si ce n'est pas utf8, ajouter cela en début de page PHP :
header('Content-Type: text/html; charset=utf-8');
Si c'est déjà de l'UTF8, vérifier que la connexion à la base de données ait le bon charset également.
- Avec PDO :
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$dbh->exec("SET CHARACTER SET utf8");
- Avec mysqli
$mysqli->set_charset("utf8")

Re: Accents et datalist

Posté : 05 janv. 2016, 21:49
par smashcfr
Bonsoir,

Ce n'était pas le header, il a effectivement fallu voir du coté de la connexion à la base de données.

J'ai changé la classe comme suit :

Code : Tout sélectionner

try { if ($this -> _db != null) { parent::__construct('mysql:host='.$this -> server.';dbname='.$this -> _db, $this -> _user, $this -> _password/*, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)*/); } else { parent::__construct('mysql:host='.$this -> server, $this -> _user, $this -> _password); } $this -> exec("SET CHARACTER SET utf8"); $cnx_ok = 1; }
Et tout fonctionne bien.

Merci bcp, bonne soirée