Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009
-
12 avril 2009 à 20:43
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009
-
13 avril 2009 à 15:44
Bonjour,
J'ai un site qui fonctionne avec AJAX composé de:
- une page index.php pour l'affichage qui contient des balises HTML, avec la balise:
- une page interact.php utilisée uniquement pour l'interaction avec la base de données, sans HTML, mais avec le header suivant:
header('Content-Type: text/xml; charset=utf-8');
- une base de donnée MySQL qui utilise le codage "utf8_unicode_ci"
- une page ajax.js répertoriant toutes les fonctions javascript, sans indication du charset utilisé.
Toutes les pages ont été créées avec l'IDE Code::Blocks et enregistrés en UTF-8.
Lorsque j'essaye d'afficher des caractères "spéciaux" récupérés depuis la BDD grâce à interact.php et AJAX, des points d'interrogation s'affichent(en revanche, les caractères présents du même type présents d'office dans index.php s'affichent correctement).
Je dois encore préciser qu'avec FireBug je peux voir le résultat de la requête AJAX et les caractères y sont affichés correctement.
Il me semble donc qu'il y a un "maillon" manquant qui fait que le site ne peut pas supporter pleinement le unicode; quelqu'un aurait-il une idée?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 09:22
bonjour,
>> Lorsque j'essaye d'afficher des caractères "spéciaux" récupérés
>> depuis la BDD grâce à interact.php et AJAX,
bah ? tu ne disais pas que interact.php n'avait pas de html ?
( >> une page interact.php utilisée uniquement pour l'interaction
>> avec la base de données, sans HTML ... )
donc... tu affiches ça ailleurs ?
et là : meta et/ou header sont ok ??
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 10:19
si j'ai compris
dans index.php, on fait appel avec ajax à interact.php
qui retourne les infos de la base de données
si toutes les sources sont bien en utf-8, que les
meta et les header sont cohérents...
pas de souci... "normalement"
peut-être te manque-t-il un
xml.setRequestHeader("Content-type", "charset=utf-8");
derrière l'Open ?
attention aussi ( mais tu dois le savoir ) à l'envoi
des header qui doivent être fait avant tout ( même un espace ! )
lu dans le manuel :
N'oubliez jamais que header() doit être appelée avant que le moindre
contenu ne soit envoyé, soit par des lignes HTML habituelles dans le
fichier, soit par des affichages PHP. Une erreur très classique est
de lire un fichier avec include() ou require(), et de laisser des
espaces ou des lignes vides, qui produiront un affichage avant que
la fonction header() ne soit appelée. Le même problème existe avec
les fichiers PHP/HTML standards.
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 11:21
Moi j'ai "xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");" et si j'essaye de remplacer par "charset=utf-8" la requête ne fonctionne pas(PHP indique une erreur de transmission de données). Je sais pas si ça vient de là...(pas moyen de trouver de la documentation sur setRequestHeader).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 11:50
en gros, j'ai un exemple :
.htm (utf8 sans bom ):
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
xml.open("POST", "utf8.php", true);
xml.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var tmp="env="+document.getElementById('env').value;
xml.send(tmp); // avec accents et le reste....
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 12:22
vérifie encore que toutes tes sources
soient bien resté en UTF-8
je ne sais plus avec quel éditeur j'ai
eu le cas où elles revenaient en ansi
si aucun caractère nécessitante "utf8"
n'existait dans la source ;o(
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 13:18
J'ai fait ton exemple et il marche, mais j'ai tjs le même problème avec mon site...
Bon par contre j'utilise une requête renvoyant un document XML et toi un texte, ça vient peut être de là?
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 14:34
En fait c'est interact.php qui génère le XML...j'ai rajouté la ligne dont tu parles, mais toujours aucun changement. De toute manière, Firebug affiche correctement les caracères donc le souci vient plutôt du javascript non?(autrement je vois pas ce que ça peut être).
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 14:53
je t'avoue n'avoir jamais eu à faire, en utf-8,
html/javascript + php + xml,
faudrait que je teste.
mais, en fait, AUCUNE RAISON, à priori,
y compris à ce qui pourrait être du au javascript !
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 15:10
Encore quelques tests et on dirait que le problème vient de MySQL...je ne comprends pas, pourtant j'ai bel et bien configuré ma base de données pour qu'il s'agisse d'unicode.
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 13 avril 2009 à 15:34
>>le problème vient de MySQL
possible que l'erreur faite soit là
un remarque ?
pourquoi donc retourner du xml à partir d'une base de données ?
ou j'ai rien compris ?
traitement nécessaire coté php + coté javascript....
ça fait double emploi... non ?
Amallric
Messages postés8Date d'inscriptionlundi 21 juillet 2008StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 15:44
J'ai trouvé!
Le problème était bien du côté de la BDD. En effet elle retournait des informations en latin1 bien que je l'ai configurée pour encoder en utf-8....en tout cas, la fonction php utf8_encode() a suffi pour régler le problème.
Sinon pour mon site en fait avec PHP je construis un document XML en récupérant des infos depuis une bdd, je viens chercher le doc XML avec AJAX, je l'analyse et je crée à la volée ma page html grâce à JavaScript...Après je sais pas si c'est bien optimisé, je fais ce site pour le fun et pour m'entrainer avec AJAX et pour le moment ces objectifs sont remplis! (bon ok passer 2 jours à se casser la tête sur ce problème d'encodage n'est pas forcément fun ^^ )