Vista et IE : problème charset

Signaler
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008
-
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008
-
Bonjour!

J'ai un soucis de charset avec mon code javascript après avec récupéré une page web sur un serveur distant (ndd différent)

Mon code fonctionne parfaitement avec Firefox et IE 7 sous WinXP, il fonctionne avec FF sous Vista, mais pas avec IE 7 sous vista.

En gros il me récup de l'UTF-8 au lieu d'iso.

J'ai placé une balise meta pour specifier iso, j'ai placé un header php pour spécifier iso, ça marche pas.

Voici le code :

function makeRequest(method,url,parameters,callback,mode) {

    try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    } catch (e) {}

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/html; charset=iso-8859-1');
            }

        } else if (window.ActiveXObject) { // IE
           try {
               http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
    if(mode==true)
            http_request.onreadystatechange = function() { callback(http_request); };
    http_request.open(method, url, mode);
    if(method=='GET') {
            http_request.send(null);
    } else {
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
        http_request.setRequestHeader("Content-length", parameters.length);
        http_request.send(parameters);
    }
    if(mode==false)
        callback(http_request);
    }


A savoir que l'encodage est bien sur "iso" dans les options d'IE.

Est-ce que quelqu'un saurait m'aider s'il vous plait ?

14 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
bonjour,
perso j'ai toujours le même principe

coté javascript :
                xml.open(.....);
                xml.setRequestHeader("Content-type", "charset=iso-8859-1");
                ....
                xml.send(...); 
coté php :
                <?php header('Content-type:text/html;charset=ISO-8859-1'); ?>

c'est tout. pareil avec UTF-8 sauf que les script sont sauvés en UTF_8
et tout baigne.

Cordialement     Bul    [mon Site] [M'écrire], <!--
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Ben c'est déjà ce que j'ai!

http_request.open(method, url, mode);
    if(method=='GET') {
            http_request.send(null);
    } else {
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
        http_request.setRequestHeader("Content-length", parameters.length);
        http_request.send(parameters);
    }
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
ah... navré : je n'avais pas vu que cela te semble un problème spécifique à IE7 + Vista !
je ne peux pas répondre, pas encore sous vista, mais ça m'étonne....
( avec Xp rien de particulier au niveau paramétrage IE, affichage aui est apr défaut
  ne doit guère influer à ce niveau ... )
Cordialement    Bul  [mon Site] [M'écrire], <!--
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>Ben c'est déjà ce que j'ai!
et coté php ?
CordialementBul[mon Site][M'écrire], <!--
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Aussi :]

Enfin normalement.

J'ai un index.php qui include mes pages. Je j'ai donc mis dans index.php, tout tout en haut
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
si tout est cohérent...
pas de mystère, ça doit baigner, obligatoirement , vista ou pas, IE7 ou pas.
Cordialement     Bul   [mon Site] [M'écrire], <!--
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Ca pourrait pas venir du fait que ce soit de la récupération de données externes ?

Parce que non, ça baigne pas...
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
c'est à dire ?   un domaine, un site différent ?
si c'est le cas, on ne fait effectivement pas ce qu'on veut, mais
   opera, safati, ie, ff ( qui seul, depuis peu, offre des possibilités ) ...
   toutes versions de windows ou linux... ça aurait la même réaction.

à priori, je ne vois pas.
sauf si avec vista, ne pas avoir ce qu'il faut comme header
coté php, ne donne pas la même chose qu'avec xp par défaut ?

attendons d'autres idées peut-être ?

Cordialement    Bul  [mon Site] [M'écrire], <!--
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
Salut,

J'ai vista et aucun pb avec les header en php ni setRequestHeader en javascript donc ça vient pas de la...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Je ne pense pas non plus que ça "vienne" de vista, mais ce qui est certains c'est que seulement vista et ie me le font. je suis allé jusqu'a installer une machine virtuelle pour m'en assurer moi même
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
Bonjour,

Et plus simplement y'aurai pas une option pour choisir le charset par defaut sous IE 7 et au lieu d'etre en automatique ben c'est une valeur par defaut (dans ce cas UTF-8) je dis ça à tout hasard ;-)

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog
Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)

<fon></fon>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
bah, si ça baigne pour nico avec IE7+Vista aucune raison que ça ne marche pas
pour toi, sauf comme je suggérais ainsi que maelob ( )  la valeur par défaut
qui n'est peut-être plus la même. ce qui est sûr c'est que ça doit marcher !
si erreur il y avait, ça aurait été rectifié depuis longtemps...
Cordialement     Bul  [mon Site] [M'écrire], <!--
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Oui mais fait-il ça sur un serveur distant ?

Moi je récupère des topics de forum phpbb, des forums sur lesquels je n'ai pas la main.

@Maelob : le charset sous IE que ce soit sur mon site ou sur les sites que je récupère est bien noté ISO.
Messages postés
7
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
14 septembre 2008

Yeeeess!!

Après de looongues heures d'études de code d'autres sites j'ai enfin trouvé la solution! Bon je comprends ce qu'elle fait mais je suis incapable de l'écrire moi-même. Si quelqu'un la connait et veut prendre deux minutes pour l'expliquer, je prends ^^

De ce que j'ai compris, elle utilise le responseBody pour étudier et corriger le responseText... Enfin je crois!

En tout cas voila la solution

Sur mon callback, au lieu de faire

callback(http_request.responseText);


je fais

callback(TexTConvert(http_request.responseText,http_request.responseBody));


Le TexTConvert est le suivant :

function TexTConvert(text, body) {
  var StrErr=String.fromCharCode(65535);
  var result="";
  var code="";
  var len=0;
  var begin=0;
  var ptr=0;
  while ((pos=text.substring(begin).indexOf(StrErr))!=-1){
    ptr+=pos;
    code=bcode(body,ptr);
    if(code<=191) len=1;
    else if(code<=223) len=2;
    else if(code<=239) len=3;
    else if(code<=247) len=4;
    else if(code<=251) len=5;
    else if(code<=253) len=6;
    else len=1;
    if(code==255) result+=text.substring(begin,pos+begin)+b2s(body,ptr,0);
    else result+=text.substring(begin,pos+begin)+b2s(body,ptr,ptr+len);
    ptr+=len;
    if(code==255) begin=text.length;
    else begin+=pos+1;
  }
  result+=text.substring(begin);
  return(result);
}


Ensuite on rajoute deux fonctions vbscript :

Function b2s(abin,abegin,aend)
  b2s=""
  If aend=0 Then
    aend=UBound(abin)+1
  End If
  For z=abegin to aend-1
    b2s=b2s&amp;chrw(ascw(chr(ascb(midb(abin,z+1,1)))))
  Next
End Function

Function bcode(abin,pos)
  bcode=ascw(chr(ascb(midb(abin,pos+1,1))))
End Function


Et tada! On retrouve nos accents :yaisse2:

Merci pour votre aide ^^

PS : le soucis de IE était qu'il accepte pas la propriété overrideMimeType!