Problème d'accents avec ajax dans le sens client --> serveur [Résolu]

Signaler
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007
-
Messages postés
3
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
30 mai 2007
-
Bonjour




Je rencontre un problème d'accents en utilisant l'objet xmlhttprequest : les accents sont mal transmis vers le serveur. Je sais qu'il s'agit d'une histoire de codage de caractères, mais de toutes les réponses que j'ai pu trouver sur ce forum et sur d'autres, aucune n'a réussi à solutionner mon problème. J'utilise ici l'ASP3, voici une page de test. Les caractères reçus par le serveur sont : éà alors que j'attend

éà , et je ne voit pas où ça pèche.


J'avoue que je sèche, car c'est pas la première fois que j'utilise cet objet, mais c'est la première fois que j'ai ce problème.

 <html>
<head>
<title></title>
<link href= "test.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
function getHTTPobject()
    {
    var xmlHttp=false;
    /* Compilation conditionnelle d'IE */
    /*@cc_on
    @if (@_jscript_version >= 5)
        try
            {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
        catch(e)
            {
            try
                {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
            catch(E)
                {
                xmlHttp=false;
                }
            }
    @else
        xmlHttp=false;
    @end @*/
    /* Tentative de créer l'objet s'il n'existe pas déjà */
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
        {
        try
            {
            xmlHttp=new XMLHttpRequest();
            }
        catch(e)
            {
            xmlHttp=false;
            }
        }
    return xmlHttp;
    }
function test()
    {
    var xho=getHTTPobject();
    if (xho)
        {
       
        xho.onreadystatechange=function()
            {
            if (xho.readyState == 4) // 4=httpComplete
                {
                if (xho.status == 200) // 200 : code Http : OK
                    {
                    // Traitement de la réponse
                    respText=xho.responseText;
                    respXML=xho.responseXML;
                   
                    }
                }
            }
       
        var filtre=" p_id=éà ";
        with (xho)
            {
           
            open("POST", "test2.asp", true);
            setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset =iso-8859-1")
            send(filtre);
            }
        }
    }
</script>

</head>

<form>
test
</form>
</html>

Si quelqu'un réussit à voir le pourquoi du comment ...

Cordialement
Roro webDev

14 réponses

Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Ta essayer d'escaper ton texte que tu envois parfois ca pose probleme
si tu l'encode pas, car si tu envoie comme parametre texte1=valeur et
que valeur contient des % ou & la chaine peut s'envoyer mal, car
ces caractères sont interprétés.


Sinon comme bultez la dit c'est surement avec l'encodage, il suffit de trouver le bon.
Messages postés
3
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
30 mai 2007
1
J'espere que ton probleme est réglé depuis... mais moi aussi j'ai vécu la même chose. J'ai perdu une matinée pour trouver une solution bien simple pourtant!

Lorsque tu envoies tes données en post assure toi d'utiliser la fonction "escape( )" pour transformer les caractères spéciaux.

xmlHttp.open("POST",url,false);
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');
xmlHttp.setRequestHeader("Content-length", data.length);
xmlHttp.send(escape(data));

Ensuite dans ta page ASP qui est appellée, ajoute cette petite fonction que tu pourras appeller pour décoder tes données.

<script language=JScript runat=server> 
  function Decode(str)
  { 
      return unescape(str);
  }
</script>

Pour faire l'appel de cette fonction, rien ne change. C'est comme une fonction en ASP.

var maChaine = Decode(String(Request.Form));

Voila! Tout fonctionne très bien pour moi, même avec la "Evil String of Death"

TestString" a ' b < ' > ",!"/%$?$&?%*(()%/"!"/&?%$/"*&$/"?%&?-f¯Ñ112<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

J'espère t'avoir aidé.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,



   overrideMimeType('text/html; charset= ISO-8859-15');

lu "ailleurs", pas testé...
sûrement d'autres possibilités, bien entendu...



<hr />
            Cordialement    Bul    [
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
je n'ai pas précisé : à la place du setRequestHeader...



<hr />
         Cordialement    Bul    [
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Bizarre parce ke je pensais ke le  ISO-8859-15 c'était juste l'ajout du symbole ?

S.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
tu as probablement raison syndrael,
je parlais de la fonction overrideMimeType pas du paramètre ISO....
<hr />
            Cordialement    Bul   
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Non, pas mieux avec overrideMimeType, et même pire puisque plus rien n'est transmis.

Cordialement
Roro webDev
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
alors si

overrideMimeType ne fonctionne pas,
setRequestHeader("Content-type", "text/html; charset= ISO-8859-1");




peut-être ? ou autre  ?


à mon avis, il faut trouver le bon paramètre pour le setRequestHeader

  ?
mais je ne sais pas trop en fait, là, et je dis peut-être n'importe quoi.
comme déjà vu   header('Content-type:text/html;charset=ISO-8859-1');
coté php pour régler ce problème d'accents....
<hr />
            Cordialement    Bul    [
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Comme indiqué dans mon post, j'utilise asp.
text/html ne transmet plus rien (j' ai bien précisé sens client-->serveur).
Personne n'a jamais eu de problèmes pour transmettre des caractères accentués vers un serveur avec ajax ?

Cordialement
Roro webDev
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
>>Personne n'a jamais eu de problèmes pour transmettre ...
tant mieux pour tout le monde alors.
<hr />
         Cordialement    Bul    [
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Ben ouais, mais ça m'arrange pas ...

Cordialement
Roro webDev
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Oui, Je suis quasiment sûr que bultez a raison et qu'il s'agit d'un problème d'encodage. Je m'en sors avec encodeURI en attendant de trouver mieux, ou le bon encodage.

Merci pour vos réponses

Cordialement
Roro webDev
Messages postés
67
Date d'inscription
mardi 25 janvier 2005
Statut
Membre
Dernière intervention
20 octobre 2010

Hello,

essaye ça
filtre = encodeURI(filtre)


Cette fonction encode tous les caractères autres que  :
[A-
Z]
[a-
z]

- _ . ! ~ * ' ( )
, / ? : @ &amp; = + $


Voilou, par contre je pense qu'il va falloir que tu trouves la fonction
inverse....en asp, je sais qu'il existe en php une fonction urlDecode
et en javascript decodeURI mais en asp....


++
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Salut

en fait c'est pas un probleme de déclaration de type d'encodage dans le setRequestHeader

Ce que tu peux faire c'est telecharger ma librairie de conversion de chaine de caractere ANSI -> UTF8 et l'inverse
Et tu teste en 1er d'encoder ta chaine en UTF8 et apres tu l'envoies dans SEND de ton objet ajax et si cela ne fonctionne toujours pas essai de l'encoder en ANSI

L'envoie des requetes AJAX doit normalement absolument se faire avec un encodage UTF8

( par exemple avec du php  lorsque tu fais un echo pour renvoyer la réponse ben tu es obligé de faire utf8_encode(echo.... ); )

Voila je te donne l'adresse de ma librairie de converion de chaine :
 http://www.javascriptfr.com/codes/LIBRAIRIE-UTF8-CODAGE-DECODAGE-VOLEE_39687.aspx

pour encode en UTF8 tu applique la fonction 'encode' et pour coder en ANSI tu applique la fonction 'decode'

Pour ma part je pense que le codage en ANSI résoudrait ton probleme... mais peut etre que je me trompe et que cela sera l'inverse a toi de voir.

Bonne prog

--The Rubik's Man--