Javascript: problème avec Unicode

Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 avril 2009 - 12 avril 2009 à 20:43
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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:
<meta http-equiv="Content-Type"
  content="text/html;charset=UTF-8" />


- 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?

Merci d'avance,
Amallric

15 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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 ??

@+
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 avril 2009
13 avril 2009 à 09:58
J'affiche dans index.php qui a un meta adéquat(pas de header par contre).
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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.

@+
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
13 avril 2009 à 11:38
ne pas remplacer, mettre en plus
et ça ne doit pas donner d'erreurs,
sinon c'est que UTF-8 n'est pas
respecté "partout", je pense ( donc j'essuie )
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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....

.php (utf8 sans bom ):
<?php
header('Content-Type: text/html; charset=utf-8');
echo 'éàö'.$_POST['env']
?>

et tout baigne
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 avril 2009
13 avril 2009 à 11:50
J'ai essayé comme tu dis mais ça n'a rien donné. Bon je suppose tant pis, merci pour ton aide en tout cas!
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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(
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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à?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
13 avril 2009 à 14:25
ah ?!?!!???
comment savoir ? toi tu as tout, pas nous !
on découvre... au fur et à mesure !

en XML "la 1ère ligne" ce devrait être :
<?xml version="1.0" encoding="utf-8"?>
et sauvé en utf8 ( sans bom ) lui aussi
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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).
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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 !
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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.

Je vais faire d'autres essais...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
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 ?
0
Amallric Messages postés 8 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 13 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 ^^ )

En tout cas merci beaucoup pour ton aide!
0