Bonjour,

Je deviens fou depuis plusieurs heures à tourner en rond sur ce problème. Je pense avoir tout essayé, mais j'ai forcément dû oublier quelque chose, sinon je ne serais pas ici Smiley smile


J'ai une bête page "test" avec le minimum de code et un content-type bien déclaré en uft8.
J'ai une base de données dont le jeu de caractères par défaut est utf8 et l'interclassement pour la connexion est utf8_general_ci. Dans cette base, j'ai une seule table en utf8_general_ci avec un seul champ text en utf8_general_ci qui ne contient qu'un seul caractère: "é".

Lorsque je fais une requête pour afficher le contenu de ce champ dans ma page test, je reçois en retour le drôle de sigle du problème typique quand on veut afficher de l'iso en utf8.

Mais le problème, c'est que TOUT a l'air pourtant bien configuré pour traiter l'utf8. Et le web-snifer présenté dans la FAQ m'indique bien que le content-type est utf8!! Smiley eek

Voici le code source de ma page affichée:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
</head>

<body>
é
&#65533;</body>
</html>


Le caractère qui s'affiche correctement a été écrit en dur manuellement dans le fichier, et, lui, passe bien à l'écran.
Le second représenté par un sigle est le même caractère, mais provenant de ma base MySql...


Si quelqu'un a une piste pour moi car je sèche complètement.

Merci d'avance


Edit: le sigle ne passe pas de le code il s'agit du petit losage noir contenant un ?
Modifié par Xav1979 (07 Dec 2008 - 09:14)
Arf, je me réponds moi-même juste après: le problème a été résolu avec l'instertion de
mysql_query("SET NAMES 'utf8'");
avant ma requête!

Mais je ne comprends pas bien le pourquoi du comment, malgré les articles que je viens de lire à ce sujet.
Je vais devoir le faire à chaque fois??

Le fait que tout soit déjà en utf-8 (page, content-type, base, connexion, table, champ) et que je doive malgré tout utiliser cette insertion est dû à quoi exactement??

Merci
Hello,

Xav1979 a écrit :

Arf, je me réponds moi-même juste après: le problème a été résolu avec l'instertion de
mysql_query("SET NAMES 'utf8'");
avant ma requête!

Mais je ne comprends pas bien le pourquoi du comment, malgré les articles que je viens de lire à ce sujet.
Je vais devoir le faire à chaque fois??
Non : il suffit de le faire une fois après la connexion à ta base (donc juste après le mysql_select_db).

Xav1979 a écrit :

Le fait que tout soit déjà en utf-8 (page, content-type, base, connexion, table, champ) et que je doive malgré tout utiliser cette insertion est dû à quoi exactement??
Au fait que la plupart des hébergeurs paramètrent par défaut la connexion en LATIN1.
Modifié par Heyoan (07 Dec 2008 - 12:30)
Si tu as accès à la configuration du serveur, tu peux paramétrer MySQL pour utiliser une connexion en UTF-8 par défaut.
Hello

Merci pour vos réponses.

Florent, cette modification se fait-elle via phpMyAdmin, ou directement sur le serveur MySQL? Dans le premier cas, j'ai modifié tous les paramètres possibles en ce sens sans rencontrer le résultat souhaité; dans le second cas, je n'y ai malheureusement pas accès puisque je suis chez un hébergeur classique.
Xav1979 a écrit :
Florent, cette modification se fait-elle via phpMyAdmin, ou directement sur le serveur MySQL?

Elle se fait directement sur le serveur tout court, via un accès SSH, en modifiant le principal fichier de configuration de MySQL puis en relançant MySQL.

Xav1979 a écrit :
je n'y ai malheureusement pas accès puisque je suis chez un hébergeur classique.

Qu'ils soient classiques ou baroques, la plupart des hébergeurs proposent des hébergements mutualisés, des hébergements avec serveur privé virtualisé, ou des hébergements dédiés. La plupart des petits sites sont hébergés sur des hébergements mutualisés, bon marché, pour lesquels on n'a effectivement pas accès à la configuration du serveur (au delà de quelques paramètres pour Apache via un fichier .htaccess local).