Problème d'accents avec ajax dans le sens client --> serveur

Résolu
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007 - 25 sept. 2006 à 14:34
JeePI196 Messages postés 3 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 30 mai 2007 - 30 mai 2007 à 17:50
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

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
25 sept. 2006 à 20:01
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.
3
JeePI196 Messages postés 3 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 30 mai 2007 1
30 mai 2007 à 17:50
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é.
1
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 sept. 2006 à 14:50
Bonjour,



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

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



<hr />
            Cordialement    Bul    [
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 sept. 2006 à 14:58
je n'ai pas précisé : à la place du setRequestHeader...



<hr />
         Cordialement    Bul    [
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
25 sept. 2006 à 15:22
Bizarre parce ke je pensais ke le  ISO-8859-15 c'était juste l'ajout du symbole ?

S.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 sept. 2006 à 15:31
tu as probablement raison syndrael,
je parlais de la fonction overrideMimeType pas du paramètre ISO....
<hr />
            Cordialement    Bul   
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
25 sept. 2006 à 15:35
Bonjour




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

Cordialement
Roro webDev
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 sept. 2006 à 15:50
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    [
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
25 sept. 2006 à 16:16
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 sept. 2006 à 16:32
>>Personne n'a jamais eu de problèmes pour transmettre ...
tant mieux pour tout le monde alors.
<hr />
         Cordialement    Bul    [
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
25 sept. 2006 à 16:40
Bonjour




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

Cordialement
Roro webDev
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
26 sept. 2006 à 10:14
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
0
jediNoobiewan Messages postés 67 Date d'inscription mardi 25 janvier 2005 Statut Membre Dernière intervention 20 octobre 2010
27 sept. 2006 à 15:55
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....


++
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
14 oct. 2006 à 00:55
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--
0
Rejoignez-nous