Bonjour,

Je sais que ce sujet a été traité maintes et maintes fois, mais malgré mes recherches, le problème persiste.

J'ai des pages en HTML/PHP qui sont encodés en UTF-8 sans BOM sous Notepad++
Par ailleurs, j'ai ajouté entre les balises <head></head>

<meta charset="utf-8">


Certaines de mes pages sont amenés à lire du contenu provenant de ma base de donnée.

Celle-ci est encodé en utf8_général_ci ainsi que chacune de mes tables et chaque champ.

Lors de la connexion sur mon serveur SQL je lance cette requête :

mysql_query("SET NAMES 'utf8'");


Les "?" à la place des accents sont visibles sur les articles tirés de la BDD.
Pour ce qui est du contenu HTML écrit dans les pages, les accents s'affichent.

Une idée pour palier ce problème ?
Merci. Smiley cligne
Modifié par Vict0 (07 Jun 2011 - 09:42)
Hello,

Là comme ça je vois trois sources d'erreur possibles:

1. Si les en-têtes HTTP envoyés avec la page déclarent de l'ISO-8859-1 (et ils sont prioritaires sur ta <meta> dans le code HTML). Je n'y crois pas trop mais c'est à vérifier (avec Web Sniffer par exemple).

2. Si les données dans la base sont en ISO-8859-1 et pas en UTF-8 (l'interclassement "utf8_general_ci" ne prouve pas que tes données soient bien en UTF-8, ce n'est qu'un paramètre de configuration).

3. Si tu utilises une fonction PHP qui recrache de l'ISO-8859-1, ou attend en entrée des données dans ce codage alors que tu lui fournis de l'UTF-8. Il faut faire attention à toutes les fonctions de manipulation de chaines de caractères, en particulier.
Bonjour,

Merci d'avoir pris le temps d'étudier mon problème.

1. J'ai vérifié les entêtes HTTP via une extension pour Firefox :

a écrit :
GET /bac/Projet/recherche.php?region=SudOuest&situation=&NombrePersonne=&SurfaceMini=&SurfaceMaxi= HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://127.0.0.1:8888/bac/Projet/
Cookie: PseudoLocation=Admin
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Sun, 05 Jun 2011 15:46:01 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.6
X-Powered-By: PHP/5.3.6
Content-Length: 2707
Keep-Alive: timeout=5, max=97
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8


2. Comment puis-je vérifier si le contenu de mes articles en BDD est en ISO-8859-1

3. Le projet sera présenté sur un serveur qui ne prend pas en charge les functions de sécurisation de variable. (Ne me demandez pas pourquoi c'est ainsi...).
La seule fonction que j'utilise avant d'insérer l'article dans la BDD est implode.

Mais l'implode est utilisé que pour un champ sur formulaire.

Merci. Smiley cligne
Vict0 a écrit :
2. Comment puis-je vérifier si le contenu de mes articles en BDD est en ISO-8859-1

Si les données en base sont bien toutes marquées comme étant en UTF-8 (interclassement utf8_general_ci par exemple) pour l'ensemble des tables et champs concernés, tu peux écrire un script PHP simple qui récupère des données de la base, avec une connexion en "SET NAMES 'utf8'". Partant de là:
- Si en affichant le résultat de ce script en UTF-8 dans un navigateur tu as des données correctes, tes données sont bien en UTF-8 et à priori correctes.
- Si en l'affichant en UTF-8 le résultat est mauvais mais ça passe en ISO-8859-1, tes données en base sont à priori en ISO-8859-1.
- Si en l'affichant en UTF-8 tu obtiens toujours des "?" (caractère point d'interrogation et pas un autre symbole de caractère inconnu) à la place de certains caractères, et si le passage dans un autre codage tel que ISO-8859-1 ou CP-1252 n'y change rien, tu as sans doutes des "?" littéraux dans tes données, autrement dit les données sont corrompues.
Modifié par fvsch (06 Jun 2011 - 13:51)
a écrit :
- Si en l'affichant en UTF-8 tu obtiens toujours des "?" (caractère point d'interrogation et pas un autre symbole de caractère inconnu) à la place de certains caractères, et si le passage dans un autre codage tel que ISO-8859-1 ou CP-1252 n'y change rien, tu as sans doutes des "?" littéraux dans tes données, autrement dit les données sont corrompues.


Salut,

J'étais dans ce cas, mais j'ai résolu le problème de la façon suivante :
J'ai remplacé les caractères à problèmes par le code HTML correspondant.

Merci de m'avoir aidé. Smiley cligne

Edit : Le projet est pour mon bac, et je n'ai pas à écrire d'autres articles. C'est pour ça que la solution que j'ai posté me convient. Smiley cligne
Modifié par Vict0 (06 Jun 2011 - 20:35)
Vict0 a écrit :
J'étais dans ce cas, mais j'ai résolu le problème de la façon suivante :
J'ai remplacé les caractères à problèmes par le code HTML correspondant.

Si tu avais encore accès aux caractères originaux, c'est donc que tu n'avais pas des caractères "?" littéraux en base de données, donc tu n'étais pas dans ce cas et le problème était ailleurs. Au final, tu as contourné le problème plutôt que d'en trouver la cause et de le résoudre. Smiley cligne