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.