Salut a tous,

J'ai encore un soucis d'affichage de caracteres mais cette fois le probleme est sensiblement different car les caracteres espagnols qui s'affichent mal ne proviennent pas d'un fichier mais d'un champ de table MySQL. L' interclassement de ce champ est utf8-unicode_ci. Les articles contenus dans ce champ sont affichés par un print dans mon index.php, lequel contient dans le <head> la ligne suivante :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Malgre cela web-sniffer.net me dit que le Content-Type de ma page est text/html, pas UTF8. Que dois-je faire pour changer cela ? Est-ce bien la cause de mon probleme ?
Essaie de faire un
mysql_query("SET NAMES utf8");

avant de récupérer les données de ta base pour voir ?
Modifié par Skoua (11 Aug 2009 - 11:47)
Ah oui j'aurais du preciser ca, en fait j'ai deja un mysql_query("SET NAMES utf8"); apres la selection de ma DB. Mais ca change rien.
apericube a écrit :
Malgre cela web-sniffer.net me dit que le Content-Type de ma page est text/html

Ce qui est vrai. C'est ce que tu déclares dans le HTML, et à priori ce que déclare le serveur HTTP (Apache?).

apericube a écrit :
pas UTF8

Non, ça c'est le charset. Il n'y a pas d'en-tête spécifique au charset en HTTP, donc on rajoute cette information à la suite du type MIME dans l'en-tête Content-Type, par exemple:
Content-Type: text/plain; charset=SHIFT-JIIS


Ceci dit, Web Sniffer te dis sans doute qu'il reçoit ceci:
Content-Type: text/html
Ce qui signifie que le serveur n'envoie pas d'information sur le charset (comme souvent). Si le charset est bien indiqué dans ton fichier HTML, ça devrait suffire, mais globalement il est préférable de configurer ton serveur aussi. (Pour Apache, voir du côté de AddDefaultCharset par exemple.)

apericube a écrit :
Est-ce bien la cause de mon probleme ?

Probablement pas. Déjà, tu prends ton navigateur et tu lui demande quel encodage il utilise pour afficher la page (Affichage > Encodage des caractères > C'est lequel qui est coché, hum?...). Si c'est ISO-8859-1, tu as à priori un problème de déclaration de l'encodage (balise META absente du code HTML, par exemple, ou encodage ISO-8859-1 déclaré par le serveur mais d'après ce que tu dis des résultats de Web Sniffer ce n'est pas le cas). Si c'est de l'UTF-8 (c'est normalement le cas), alors c'est que les données que tu reçois ne sont pas en UTF-8.

apericube a écrit :
L'interclassement de ce champ est utf8-unicode_ci.

Ce qui ne garantit pas que les données elles-mêmes soient en UTF-8 et ne soient pas corrompues.

Pour une application PHP + MySQL, les points à surveiller sont:
- l'encodage de la table dans MySQL (pas dit explicitement, mais que l'on peut déduire de l'interclassement);
- l'encodage de la connexion MySQL;
- l'utilisation de fonctions PHP, pour traiter les données, qui gèrent mal les encodages multi-octets (dont UTF-8), ou bien qui les gèrent bien uniquement si on indique l'encodage utilisé en paramètre de la fonction (voir la doc de la fonction).

Plus globalement, pour une application UTF-8, il est préférable d'utiliser MySQL 5 et PHP 5.

Bien sûr, tout cela est vain si les données enregistrées sont corrompues. Smiley lol
Merci Florent pour ces eclaircissements. J'ignorais que le contenu d'un site PHP/MySQL passait par autant de "phrases" differentes, mais je comprend mieux maintenant pourquoi j'ai si souvent des problemes avec les caracteres..!