Ajax et accent
Le
osele
Bonjour,
J'ai beau avoir lu pas mal de page sur le sujet je ne comprends pas le
pb.
J'ai une page ouèbe qui s'affiche très bien en direct, avec des
accents, sous Firefox:
http://osele.free.fr/prg/accent.html
Dans, cette page, j'ai un script qui la charge en ajax et l'affiche Ã
la suite.
Visiblement, la page est systématiquement récupérée en =
utf-8 !
Ca ne marche pas pour les accents, qui sont remplacés par des ?
Quel est le pb ?
(Je ne peux pas toucher la page source qui est sur un autre site.)
J'ai simplifié le code et voici le source (j'ai essayé diffé=
rents
RequestHeader) :
<html><head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>pas de titre</title>
<script language="Javascript" type="text/javascript">
function ajax(url) {
var xhr=null;
// détection du navigateur pour la création de l'objet XMLHttpRe=
quest
(soit l'acronyme xhr)
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open( "GET", url,false);
// xhr.setRequestHeader("Content-Type", "application/x-www-form-
urlencoded;");
// xhr.setRequestHeader("Content-Type", "application/x-www-form-
urlencoded;charset=ISO-8859-1");
// xhr.setRequestHeader("Content-Type", "text/html");
xhr.setRequestHeader("Content-Type", "text/html;
charset=ISO-8859-1;");
// xhr.setRequestHeader("Accept-Charset", "ISO-8859-1;q=0.7");
// xhr.setRequestHeader("Accept-Language", "fr;q=0.8");
// xhr.setRequestHeader("Content-Type", "text/html; charset=utf-8");
// xhr.setRequestHeader("Content-Type", "text/
html;","charset=ISO-8859-1;");
xhr.send(null);
var tmpdiv = document.createElement('div');
tmpdiv.innerHTML = xhr.responseText;
document.body.appendChild(tmpdiv);
}
</script>
</head>
<body>
é<p/>
â¬<p/>
<a href='javascript:void(0);' onclick='ajax(location.href);'>cliquez
ici</a>
</body>
a+
Vincent
J'ai beau avoir lu pas mal de page sur le sujet je ne comprends pas le
pb.
J'ai une page ouèbe qui s'affiche très bien en direct, avec des
accents, sous Firefox:
http://osele.free.fr/prg/accent.html
Dans, cette page, j'ai un script qui la charge en ajax et l'affiche Ã
la suite.
Visiblement, la page est systématiquement récupérée en =
utf-8 !
Ca ne marche pas pour les accents, qui sont remplacés par des ?
Quel est le pb ?
(Je ne peux pas toucher la page source qui est sur un autre site.)
J'ai simplifié le code et voici le source (j'ai essayé diffé=
rents
RequestHeader) :
<html><head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>pas de titre</title>
<script language="Javascript" type="text/javascript">
function ajax(url) {
var xhr=null;
// détection du navigateur pour la création de l'objet XMLHttpRe=
quest
(soit l'acronyme xhr)
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open( "GET", url,false);
// xhr.setRequestHeader("Content-Type", "application/x-www-form-
urlencoded;");
// xhr.setRequestHeader("Content-Type", "application/x-www-form-
urlencoded;charset=ISO-8859-1");
// xhr.setRequestHeader("Content-Type", "text/html");
xhr.setRequestHeader("Content-Type", "text/html;
charset=ISO-8859-1;");
// xhr.setRequestHeader("Accept-Charset", "ISO-8859-1;q=0.7");
// xhr.setRequestHeader("Accept-Language", "fr;q=0.8");
// xhr.setRequestHeader("Content-Type", "text/html; charset=utf-8");
// xhr.setRequestHeader("Content-Type", "text/
html;","charset=ISO-8859-1;");
xhr.send(null);
var tmpdiv = document.createElement('div');
tmpdiv.innerHTML = xhr.responseText;
document.body.appendChild(tmpdiv);
}
</script>
</head>
<body>
é<p/>
â¬<p/>
<a href='javascript:void(0);' onclick='ajax(location.href);'>cliquez
ici</a>
</body>
a+
Vincent

Poser une question


Response Headers - http://osele.free.fr/prg/accent.html
Age: 37
Accept-Ranges: bytes
Date: Mon, 16 Apr 2007 14:57:47 GMT
Content-Length: 1396
Content-Type: text/html
Server: Apache/ProXad [Dec 3 2006 11:06:18]
Last-Modified: Mon, 16 Apr 2007 14:36:23 GMT
Etag: "205d21-574-462389e7"
Via: 1.1 proxy2 (NetCache NetApp/6.0.4)
200 OK
Commence donc par configurer ton serveur pour qu'il annonce le jeu de
caractères utilisé dans l'entête HTTP Content-Type. Si ça ne marche pas
tu peux essayer de rajouter un attribut charset à la balise <script>,
mais je ne sais pas si ça fonctionne pour les scripts internes comme
pour les scripts externes.
En effet, il n'y rien, mais ca je ne peux le changer vu que le
serveur, c'est free !
Je n'ai pas accès à la conf appache.
Je viens de faire le test, ca ne fonctionne pas (j'ai changé le
fichier accent.html).
Ce que je ne comprends pas, c'est pourquoi Firefox voit le même
fichier comme de l'utf-8 alors qu'en accès direct ca marche.
J'ai la même réponse du serveur sous firebug en direct et en ajax....
Que faut-il faire sous js de firefox pour forcer l'iso ?
Néanmoins, merci pour ta réponse.
a+
Vincent
htacces, tout ça...
genre: http://www.w3.org/International/que...ss-charset
Perso, je ne suis jamais arrivé à esspliquer à FF que responseText
n'était pas en utf-8
de même, avec Safari, je ne suis pas arrivé à lui faire comprendre que
respnseText pouvait être en utf-8.
La seule parade que j'ai trouvée est d'insérer le code de charset à la
mode XML dans les fichiers appelés via XMLHttpRequest
Le code suivant fonctionne bien chez moi :
(FF et Safari)
"http://www.w3.org/TR/xhtml1/DTD/xht...">
<html>
<head>
<title>test ajax et charset</title>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css">
<title>pas de titre</title>
<script language="Javascript" type="text/javascript">
function ajax(url) {
var httpRequest = false;
if (window.XMLHttpRequest)
{ // Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
if(httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
}
else if(window.ActiveXObject)
{ // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
httpRequest.onreadystatechange = function() {
alertContents(httpRequest);
};
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
function alertContents(httpRequest) {
if httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
var tmpdiv = document.createElement('div');
tmpdiv.innerHTML = httpRequest.responseText;
document.body.appendChild(tmpdiv);
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
</head>
<body>
<p>é
<p>ç
cliquez ici</a>
</body>
</html>
--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
En effet, avec cette ligne tout fonctionne.
Le seul hic, c'est que je ne maitrise pas les pages html que je
charge.
Mon prog est en fait une extension firefox ajoutant des fonctions à
phpbb, fonctions utilisant ajax.
Or phpbb (plus précisement le template du phpbb sur lequel je fait mes
tests) n'insère pas cette balise xml.
Peut être que je peux forcer ceci dans l'extension elle même...
En tout cas, merci pour l'info et une partie de la solution !
a+
Vicnet