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 :

Retour d'une requête AJAX [Encodage]


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de regseb
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut Retour d'une requête AJAX
    Bonjour,

    J'ai un problème d'encodage avec le retour d'une requête AJAX. Je fait une requête sur une page HTML ayant comme charset : ISO-8859-1. Et quand j'affiche le contenu de la réponse : les caractères accentués sont remplacés par des �. Normalement les � sont affichés quand le fichier est en ISO-8859-1, mais le navigateur l'affiche comme de l'UTF-8. N'étant pas le propriétaire de la page HTML, je ne peux pas changer l'encodage de celle-ci.

    La solution me semblait simple : convertir la chaine de caractères de l'ISO-8859-1 vers l'UTF-8. J'ai essayé unescape(encodeURIComponent(s)), mais les accents sont remplacés par � (pour le é). J'ai ensuite testé les fonctions : Utf8.encode(), UTF8.encode() et utf8_encode() ; sans résultat.

    Voici un UserScript qui montre mon problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // ==UserScript==
    // @name    Isoutf
    // @include http://www.kraland.org/
    // @require http://code.jquery.com/jquery-2.0.3.min.js
    // ==/UserScript==
     
    $.get('http://www.kraland.org/main.php?p=5', function(data) {
        var src = $('.forum-c1:first td:first p:eq(1)', data).html();
        dest = src;
        // dest = unescape(encodeURIComponent(src));
        $('body').html(dest);
    });
    Après ces différents tests, la conversion ISO-8859-1 vers l'UTF-8 n'est peut-être pas la solution. Mais dans ce cas, je ne vois pas d'où peut venir l'erreur.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    le mieux reste quand même de Passez à l'UTF-8 sans manquer une étape.

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Oui, sauf que là le monsieur nous dit qu'il n'est pas propriétaire de la page.

    Le vrai problème ici c'est que le serveur ne renvoie aucune indication de charset, et jQuery utilise UTF-8 par défaut. La solution (que je viens de tester et qui marche) est d'utiliser overrideMimeType en passant explicitement le charset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var xhr = new XMLHttpRequest();
    xhr.open("get", "/main.php?p=5");
    xhr.overrideMimeType("text/html; charset=iso-8859-1");
    xhr.onload = function( r ){ console.dir(r); };
    xhr.send();
    C'est du pur JS. En jQuery, je pense qu'il faut ajouter mimeType: "text/html; charset=iso-8859-1" en option à la méthode $.get je te laisse vérifier si c'est ça.
    http://api.jquery.com/jQuery.ajax/
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre averti Avatar de regseb
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    @Watilin
    Merci beaucoup, le overrideMimeType corrige le problème d'accent.

    J'ai ajouté le code suivant pour résoudre le bogue sous jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.ajaxSetup({
        'beforeSend': function(xhr) {
            xhr.overrideMimeType('text/html; charset=ISO-8859-1');
        }
    });

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Ah oui, avec $.ajaxSetup, tu m'y fais penser, on peut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $.ajaxSetup({
        'mimeType': 'text/html; charset=ISO-8859-1'
    });
    C'est peut-être un peu plus performant.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par Watilin
    Oui, sauf que là le monsieur nous dit qu'il n'est pas propriétaire de la page.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2015, 16h31
  2. [AJAX] Traitement de retour d'une requête AJAX
    Par Bootax dans le forum AJAX
    Réponses: 19
    Dernier message: 25/03/2009, 16h07
  3. recupérer un retour d'une requete AJAX
    Par wincroc dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2007, 14h37
  4. [MySQL] Valeur de retour d'une requête UPDATE
    Par Eagle959 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/01/2007, 15h58
  5. [MySQL] Retour d'une requête non voulue
    Par gregal dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2006, 15h57

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