IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Vista et IE : utilisation de Charset


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut [AJAX] Vista et IE : utilisation de Charset
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    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 ?

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Quel est le content-type reconnu par le navigateur (clic droit > ...) de la page contenant ce code JavaScript, et peut-on voir le code du script appelé par ce code ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Le content type est bien ISO.

    Voici pour le code appelant, déclenché par un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function topic()
    {
    //ça c'est la txtbox de l'url de la page qu'on veut
    	var url = document.ajax.url.value;
    	makeRequest('GET', url,'',page,false);
    //ça c'est le hidden box où on met le result après pleins de traitements
    	document.ajax.result.value = "<div>" + final + "</div>";
     
    //ça c'est des trucs en plus
    	if((final != "") && (titre_final != ""))
    	{
    		document.getElementById("chargement").innerHTML = "Chargement terminé!";
    		document.ajax.submit.disabled = false;
    	}
    	else
    	{
    		document.getElementById("chargement").innerHTML = "Echec! V&eacute;rifiez que vous &ecirc;tes bien connect&eacute; et/ou que l'adresse est celle de la premi&egrave;re page.";
    		div1.className = ( div1.className == 'cachediv' ) ? '' : 'cachediv';
    	}
    }
    Merci pour votre aide!

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, mais le code appelé par XMLHttpRequest ? Tu as les moyens de vérifier l'encodage utilisé pour émettre la requête par ton code ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Ce sont des pages de forum phpbb. charset iso aussi, enfin du moins sous XP.

    Tu as les moyens de vérifier l'encodage utilisé pour émettre la requête par ton code ?
    Je ne sais pas si c'est la même question, mais comment faut-il faire ?

    EDIt : je viens de m'installer une machine virtuelle vista et je confirme que

    -L'encodage reçu est mauvais
    -La page en elle même est en ISO
    -La page que je récupère est aussi en ISO

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu as un peu répondu à la question : je cherche à connaître le jeu de caractères utilisé par le navigateur lorsqu'il contacte le serveur via ta fonction. Ca supposerait de modifier le script appelé, PHPBB, donc, pour tracer les octets reçus. J'imagine donc que ça va être délicat à tester.

    Tu as une URL pour qu'on puisse tester ? Monter une maquette pour déboguer si c'est PHPBB que tu utilises, ça va pas être facile.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Le site avec le script est ici :

    http://www.univers-rr.com/RPartage/index.php?page=ajout

    Une page de test :

    http://rome.lesroyaumes.com/viewtopic.php?t=11688

    Si il était possible de mettre "Test Vista" en titre de la page, ce serait sympa, merci :] Comme ça mes visiteurs comprendront pourquoi ce texte est là!

    Procédure pour la réception de données de sources distantes :

    Pour Internet Explorer :
    * Allez dans 'Outils' puis 'Options Internet'
    * Cliquez sur l'onglet 'Confidentialité', puis le bouton 'Avancé'
    * Cochez la case 'Ignorer la gestion automatique des cookies' et vérifiez que les deux boutons indiquent 'Accepter'
    * Cliquez sur 'Ok'
    * Allez dans l'onglet 'Sécurité'
    * Cliquez sur 'Personaliser le niveau'
    * Cherchez dans la liste le chapitre 'Divers' puis activez 'Accès aux sources de données sur plusieurs domaines' (Choisissez 'Demander')
    * Répondez oui à la question que se pose IE
    * Cliquez sur 'Ok' pour sortir du menu !
    Merci encore de votre aide!

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    J'ai fait un test. A mon avis, le problème vient des traitements (fonction callback) car la page du forum PHPBB est bien dans le bon encodage et ne contient que de l'ISO-8859-1. Malheureusement, en l'état, c'est difficile d'en dire plus.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Apparemment non. j'ai fait une fonction callback qui me fait juste un alert(responseText) et déjà là c'est en utf8

    J'ai essayé le getResponseHeader("Content-Type") mais il donne juste "text/html" et pas le charset

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est normal que tu ne récupères que "text/html" car le serveur PHPBB ne précise pas le charset dans ses réponses. Si tu as la main sur le serveur PHPBB, tu peux essayer de forcer ce charset, mais je ne sais pas si c'est possible ni comment on fait.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Pas la main, ce serait trop facile sinon ^_^

    Dernière solution, tout passer en UTF-8, mais je suis même pas certain d'y arriver...
    En plus, j'aime pas résoudre en problème en le contournant, mais bon.

  12. #12
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Je ne sais pas trop si tu as le choix. Ce que j'ai compris, c'est que le serveur ne précise pas le character set, alors, bien que la page contenant le script Ajax est sur une page ISO-8859-1, le script prend UTF-8 comme character set par défaut. Faut regarder s'il y a moyen de forcer ce character set par défaut.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Et ben même pas!

    Je viens de passer tout le site en UTF-8 et je reçoit toujours des trucs illisible, sauf que maintenant c'est pas que sur IE+Vista c'est partout!

    Je commence a me demander si c'est vraiment du utf8 que je recevais. En tout cas quand il arrive dans ma responseText il est déjà tout foutu, avec des caractères qui ont sautés, en entrainant 3 autres avec eux.

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Après recherche, le W3C indique que le jeu de caractères par défaut est UTF-8, contrairement aux specs HTTP. D'où le comportement de IE7 qui semble finalement est le bon comparé aux autres navigateurs.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Ouais sauf que non

    Là j'ai tout basculé en UTF-8 et ça a rien changé, sinon que ça marche plus sous Firefox.

    Je crois avoir compris pourquoi : IE7 n'accepte pas la méthode overrideMimeType, ça on le sait. Hors ya pas d'équivalent! Enfin j'en connais pas...

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    callback(http_request.responseText);
    je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    callback(TexTConvert(http_request.responseText,http_request.responseBody));
    Le TexTConvert est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function b2s(abin,abegin,aend)
      b2s=""
      If aend=0 Then
        aend=UBound(abin)+1
      End If
      For z=abegin to aend-1
        b2s=b2s&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

    Merci à Mac pour son aide, qui m'a permis de ne pas me décourager!

  17. #17
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    De ce que je comprends, le script recalcule les codes des caractères UTF-8 qui ne sont pas communs avec ISO-8859-1. Cool, en tout cas, si ça marche.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2009, 12h12
  2. Réponses: 1
    Dernier message: 14/08/2008, 15h38
  3. [AJAX] Vista et Ajax
    Par M1000 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 05/12/2007, 09h15
  4. [AJAX] Permission refusée d'utiliser la méthode open
    Par DaSoul dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/11/2006, 06h34
  5. [AJAX] Requète SQL en utilisant du Javascript
    Par tstievet dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 31/10/2006, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo