probleme charset avec XMLHTTPREQUEST

WRInaute accro
Bonjour,

les XMLHTTPREQUEST sont censées me semble t'il renvoyer les réponses en utf8.

Cependant en les utilisant, j'ai des problèmes d'encodage de caractères, ma page qui recois les données issus du XMLHTTPREQUEST est bien en utf8, mais l'affichage de ces données est incorrecte (accent affichés en '?')

si je fais utf8_encode() de mon résultat, cela fonctionne, mais je n'ai aps envie de les coller partout. comment faire pour régler ce problème ?

précisions :
c'est la fonction echo qui affiche pas en utf8 si elle est dans la réponse
si mes données sont dans du xml, ca passe bien

imaginons j'appele en XMLHTTPREQUEST une page toto.php
si dans toto.php j'ai : <? echo 'vélo'; ?>
le 'é' sort en '?'
si dans mon toto.php j'ai : <DATA>vélo</DATA>
le é sort bien


merki
 
WRInaute passionné
e-kiwi a dit:
les XMLHTTPREQUEST sont censées me semble t'il renvoyer les réponses en utf8.
Non, il te renvoie simplement les donnees demandees. Si celles-ci sont en utf8, tant mieux mais ce n'est pas necessairement le cas.
e-kiwi a dit:
si je fais utf8_encode() de mon résultat, cela fonctionne
Donc tes donnees sont probablement en iso-8859-1 (configuration par defaut d'apache).
Donc soit tu passes par du XML en indiquant l'encodage, soit tu convertis tes donnees sur le serveur, soit tu les convertis a l'arrivee.
 
WRInaute discret
Le plus simple et propre reste de mettre en entête de chaque fichier :
<?php header("Content-Type: text/html; charset=utf-8");?>

Pour "modifier" la valeur donnée par Apache.
 
WRInaute accro
<?php header("Content-Type: text/html; charset=utf-8");?> ne change rien :(

j'ai essayé les 2 en iso et les 2 en utf8
 
WRInaute accro
non effectivement elle n'y est pas, mais meme sur des echos de texte simple, ca marche pas non plus :
echo 'vélo' ne fonctionne pas
 
WRInaute accro
C'est quoi ton éditeur de code ? Il te génère bien du code en UTF ?

Si tu ouvre ton fichier PHP avec notepad++ par exemple, et que tu le configure en UTF-8 (notepad++ : format > encoder en UTF8), est-ce que ça marque vélo ou v?lo ?
 
Nouveau WRInaute
e-kiwi a dit:
imaginons j'appele en XMLHTTPREQUEST une page toto.php
si dans toto.php j'ai : <? echo 'vélo'; ?>
le 'é' sort en '?'
si dans mon toto.php j'ai : <DATA>vélo</DATA>
le é sort bien
merki

Essaye d'ajouter htmlentities avant l'affichage.
 
WRInaute accro
htmlentities ou htmlspecialchars, c un pansement( mais qui fonctionne aussi).

Mais ça devrait marcher si le code que tu retourne e-kiwi est bien en UTF-8 donc :
- pour ton fichier PHP : il faut qu'il soit coder en UTF8 avec notepad++ (configurer en UTF8) par exemple ou que tu retourne du texte encodé en UTF-8 avec utf8_encode()
- pour ta BDD : qu'elle soit en UTF8 ou que tu encode les données avec utf8_encode()

ATTENTION : avec utf8_encode(), certains caractères ne passent pas. Je crois qu'il faut faire le test avec le signe euro (de mémoire). Sinon, avec cette fonction, il faut bien faire attention de transformer du latin en utf. Si tu essaie de transformer de l'utf en utf, ça va merder.
 
WRInaute accro
Notepad sur un windows FR, j'imagine. Donc c normal, tes caractères sont en latin. Il faut que tu code en UTF8 avec un éditeur qui permet de faire ça.
 
WRInaute impliqué
[mode ContinueTheTroll="on"]
PSPad :mrgreen:
J'ai testé Notepad++ et PSPad, et il n'y a pas photo... PSPad a bcp plus d'options interessantes ;)
[mode ContinueTheTroll="off"]
 
WRInaute passionné
intéressant comme problème

et changer le charset de la page html en iso ne serait pas plus simple ?

rog
 
WRInaute accro
elle est déjà défini en iso, mais le problème apparemment est que le fichier xml n'a pas été crée en utf-8, et du coup quelquesoit le charset, ca ne marche pas (la seule solution qui marche est utf8_encode() mais il faudrait trouver une solution autre pour ne aps modifier tout le code
 
WRInaute passionné
moi j'ai recemment le prob pour l'affichage en russe de mon binder

bah j'ai pas mal transpiré

il n'y a qu'en écrasant le header apache sur le fichier inclus que j'ai réussi à avoir un affichage utf8

rog

si tu passais tout en iso tu n'aurai pas de probleme
 
WRInaute discret
J'avais le meme probleme que toi et voici ma solution:

Sur le fichier appelé par XMLHTTPREQUEST, je convertis toutes les données écrites avec (en php) rawurlencode.
Ensuite, en javascript, lorsque je récupere les données, j'utilise la fonction en javascript: unescape.

Et la, plus aucun soucis, et tout fonctionne !
Tiens moi au courant si ca marche :wink:
 
Nouveau WRInaute
Avec
Code:
header('Content-type: text/html; charset=iso-8859-1');

et une récupération classique tu peux avec tes accents ou autre sans problemes, par contre et là je pose une question car avec cette solution ça ne retourne pas le symbole € et là je trouve pas de methode pour corriger le souci, si quelqu'un a ça dans ses cartons, j'achète :)
 
Discussions similaires
Haut