8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je développe actuellement en PHP et je travaille avec une base de données SQL. Je rencontre un petit soucis d'encodage : en effet les caractères accentués apparaissent bizarrement (exemple : Jeux vid�o au lieu de Jeux vidéo) si je ne rajoute pas la requête $reponse = $bdd->query('SET NAMES utf8'); avant ma requête principale (SELECT en l'occurence).

	
$bdd = connectBDD();
$sql = 'SELECT id, nom FROM boutique';
// $reponse = $bdd->query('SET NAMES utf8');
$reponse = $bdd->query($sql);
while($donnees = $reponse->fetch())
{
        echo $donnees['nom'];
	echo '<br/>';
}

Mon fichier .php est bien encodé en UTF8 (sans BOM) dans Notepad++ et l'encodage dans ma base de données est bien utf8_general_ci, donc je suis un peu perdu.

Merci à vous Smiley smile
Modifié par destroydaworld (11 Feb 2013 - 21:37)
Hello,

Tu as bien mis ton charset html (<meta charset="utf8"> si tu es en html5) ?

sinon essaie ça
header('Content-Type: text/html; charset=utf-8');

à placer en haut de ton fichier php.

Moi personnellement je ferais comme ça, mais il y a peut-être d'autres solutions.
Salut

Pour gérer les caractères accentués pour un livre d'or j'utilisais utf8_encode et utf8_decode à la sortie.
@bibtou > Oui, j'utilise HTML5 et j'avais bien placé le <meta charset="UTF-8"/> en haut de mon fichier. J'ai rajouté comme tu me l'a indiqué le Header mais cela ne fonctionne pas.

@John Wayne > J'ai tenté ta solution, et effectivement, appliquer utf8_encode() à $donnees['nom'] marche mais n'y a-t-il pas une solution à appliquer en interne (configuration bdd, modification php.ini ?) pour que cela marche sans que j'ai à appliquer une fonction/requête à chaque fois ?

Merci à vous !
Modifié par destroydaworld (12 Feb 2013 - 12:22)
@jb_gfx > Certes, c'est pas con du tout Smiley smile
Mais je reste sur cette impression que c'est un peu du bidouillage, me trompé-je ?

Merci encore Smiley smile
destroydaworld a écrit :

Mais je reste sur cette impression que c'est un peu du bidouillage, me trompé-je ?


Non, c'est le fonctionnement normal de MySQL si tu veux bosser en UTF8. Sinon tu peux configurer le serveur MySQL mais sur un mutualisé tu ne pourra sans doute pas.

Avec PDO tu peux exécuter une commande lors de la connexion :


$db = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));

Modifié par jb_gfx (12 Feb 2013 - 18:53)