Page 1 sur 1
Problème d'encodage avec BDD
Posté : 24 juin 2009, 19:22
par EvaristeG
Bonjour.
Je suis en train de créer un site qui fait appel à certaines données de ma BDD, encodée en uft8.
Pour infos :
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Interclassement pour la connexion MySQL: utf8_bin
Ma table est elle aussi en utf8_bin
Le code suivant :
Code : Tout sélectionner
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link REL="StyleSheet" TYPE="text/css" HREF="css/style.css">
</head>
<body>
<? include("connexion.php");
$query = mysql_query("SELECT * FROM matable WHERE id='1' ");
$r = mysql_fetch_array($query);
echo $r[prenom];
?>
</body>
</html>
me sort le prénom avec un caractère bizarre à la place des caractères accentués, et ce malgré le fait que mon fichier source soit enregistré en uft8.
Je ne vois réellement pas pourquoi ... Quelqu'un aurait-il une idée ?
Posté : 24 juin 2009, 21:16
par sylvaing26
et avec htmlspecialchars_decode() ?
Posté : 24 juin 2009, 21:31
par momox
Et SET NAMES UTF-8 passé en requête avant de faire les premiers SELECT.
Posté : 24 juin 2009, 22:00
par stopher
Salut ,
Tout dépend aussi comment tu as enregistré ces données dans ta base ...
Tu peux donc utiliser la requête SET NAMES avant toute requête d'insertion , ou simplement modifier une fois pour toute ton my.cnf
Code : Tout sélectionner
default-character-set=utf8
default-collation=utf8
collation_server=utf8_general_ci
character_set_server=utf8
skip-character-set-client-handshake
Test ensuite avec de nouveau enregistrements ..
Ch.
Posté : 24 juin 2009, 22:48
par AB
Peut-être aussi envoyer une entête header('Content-Type: text/html; charset=UTF-8'); au début de ton script...
Plus d'infos dans ce tuto
http://www.phpfrance.com/forums/voir_sujet-245062.php
Posté : 25 juin 2009, 13:45
par EvaristeG
Bonjour, et merci pour vos réponses.
1. D'abord, htmlspecialchars_decode() ne fonctionne pas car ce qui est affiché ne ressemble pas à, par exemple, � mais à un losange rempli avec un "?" à l'intérieur.
2. Quand je mets "header('Content-Type: text/html; charset=UTF-8');", ça me retourne un message d'erreur : Warning: Cannot modify header information - headers already sent by (output started at /homez.10/monsite/ma page.php:2) in /homez.10/monsite/mapage.php on line 2
3. Le code donné par stopher, je ne sais pas quoi en faire ... Où le mettre exactement ?
EDIT : j'ai mis un "mysql_query("SET NAMES 'utf8'");" juste après la connexion à ma BDD, et celà fonctionne ...
Posté : 25 juin 2009, 14:00
par stopher
Les quelques lignes que je t'ai donné sont à mettre dans le fichier de configuration de mysql my.cnf
Puis tu redémarres mysql ...
Apres tu n'as donc plus besoin de mettre partout la requête SET NAMES ...
Ch.
Posté : 25 juin 2009, 21:04
par AB
2. Quand je mets "header('Content-Type: text/html; charset=UTF-8');", ça me retourne un message d'erreur : Warning: Cannot modify header information - headers already sent by (output started at /homez.10/monsite/ma page.php:2) in /homez.10/monsite/mapage.php on line 2
Si tu dois mettre cette ligne, il est conseillé de la mettre au début de ton code php (le plus haut possible dans ta page) pour éviter cette erreur.