Modérateur
Bonjour,

Ma base de données contient des noms de villes du monde entier. J'ai des problèmes d'affichage de certains caractères tchèques notamment. Ma base est en utf8_general_ci, les caractères s'affichent bien dans phpMyAdmin. Mes pages sont encodées en utf-8, l'encodage est bien déclaré dans chaque page.

Je prends un exemple. Voici le nom d'une ville (dans cet exemple les caractères qui posent problèmes ont été convertis en entités sur ce forum) :
Kroměříž

L'affichage de cette ville sur ma page donne ceci :
Krom??íž

Les accent aiguës sur les consonnes, quant à eux, passent.

J'ai vérifié ça sur IE9, Chrome Firefox, ça ne vient donc pas du navigateur. Une idée de ce que ça pourrait venir et comment résoudre ce problème ?

Merci d'avance.

Petite image pour voir les caractères qui ne s'affichent pas :
upload/3069-pbtcheq.png

Edit *************
Faut-il que j'utilise des entités ? http://openweb.eu.org/articles/caracteres_illegaux
Modifié par jojaba (04 Sep 2013 - 18:17)
Et pour essayer avec un

$bdd = new PDO(...);
$bdd->query("SET NAMES 'utf8'");

?
Modifié par Apoooo (05 Sep 2013 - 08:46)
Modérateur
Apoooo a écrit :


$bdd = new PDO(...);
$bdd->query("SET NAMES 'utf8'");



That's it! Merci beaucoup !
Je faisais en fait cela :

// DB connexion
try
{
	$db = new PDO('mysql:host='.DBSHOST.';dbname='.DBSNAME, DBSUSER, DBSPASSWORD);
}
catch(Exception $e)
{
    die('Erreur bdd : '.$e->getMessage());
}

// Query to db
$q = 'SELECT * FROM world'.$q_sort;
$r = $db->query($q);

while ($dt = $r->fetch(PDO::FETCH_OBJ))
{
	// Defining the datas
	$city		= utf8_encode($dt->city);
...

Il fallait faire cela :

// DB connexion
try
{
	$db = new PDO('mysql:host='.DBSHOST.';dbname='.DBSNAME, DBSUSER, DBSPASSWORD);
	$db->query("SET NAMES 'utf8'");
}
catch(Exception $e)
{
    die('Erreur bdd : '.$e->getMessage());
}

// Query to db
$q = 'SELECT * FROM world'.$q_sort;
$r = $db->query($q);

while ($dt = $r->fetch(PDO::FETCH_OBJ))
{
	// Defining the datas
	$city	= $dt->city;


Smiley smile
Cela peut également s'écrire (celui que j'utilise souvent) :


$db = new PDO('mysql:host='.DBSHOST.';dbname='.DBSNAME, DBSUSER, DBSPASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

Modifié par Apoooo (05 Sep 2013 - 15:00)