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

AJAX Discussion :

[AJAX] ajax et l'encodage des données (setrequestHeader) ,ASP


Sujet :

AJAX

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut [AJAX] ajax et l'encodage des données (setrequestHeader) ,ASP
    bonjour
    je débute en ajax ,j'ai un peu galérer pour récupérer mes donnée dans le bon encodage ou dans le bon format
    je travaille sur ASP (pas .net )

    j'ai fait ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%
    if .....  then 
    	response.contentType = "text/xml" 
    else 
    	response.contentType = "text/html"
    end if 
    response.charset ="iso-8859-1"
     
    %>
    donc suivant la requete je renvoie soit du texte soit du xml avec un charset "iso-8859-1"
    tout marche nickel pour la récupération des données a partir du serveur

    maintenant le probléme qui se pose c'est quant je veux enregistrer des donnée sur une base de donné ,je fais une requête ajax qui envoie le contenu d'une div par exemple et la recupére coté serveur pour l'enregistrer dans la base de donnée
    le probléme c'est que l'enregistrement dans la base de donnée se fait avec des caréctéres bizzares (clé est enregistré clé)
    donc je pense que c'est un probléme d'encodage des donnée envoyé

    j'ai fait une requete standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xhr_object.open("POST", "inc/ajax/ajax.asp",true);
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    var data = "afaire=update_keywords&list_keywords=" +list_keywords + "&id=" + id;
    //alert(data);
    xhr_object.send(data);
    que faut il faire ?
    aussi si quelq'un peut m'orienter vers un cours ou une FAQ sur l'encodage des données car j'ai trouvé trés peu d'informations sur ce sujet

    je vous remercie beaucoup pour votre aide

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    je viens d'essayer encodeURIComponent

    http://www.developpez.net/forums/d66...t/#post4858984

    mais j'ai toujours le même probléme les carectéres recus sur le serveur sont pas bon

  3. #3
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Tes données arrivent sur le server en UTF-8 et pas en ISO-8859-1.
    Peux tu les décoder avec une librairie (de mémoire ASP ne propose rine de la sorte...). Quel est l'encodage de ta page HTML ?

    ERE
    Quand une tête pense seule, elle devient folle.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Tes données arrivent sur le server en UTF-8 et pas en ISO-8859-1.
    Peux tu les décoder avec une librairie (de mémoire ASP ne propose rine de la sorte...). Quel est l'encodage de ta page HTML ?

    ERE
    salut remy et merci pour ta réponse
    apparemment l'objet xmlhttprequest n'envoie que en UTF-8 (lu dans le livre developpez en ajax )
    toutes mes pages sont en ISO-8859-1.
    tu connais une librairie qui fait cet encodage? ou une fonction ? car ca se résume a remplacer des chaines de caractère (65000 ou plus j'en sais rien )
    en .net ca existe? faire un post vers un aspx qui encode les données puis les renvoie vers un asp est ce possible?

    toute idée est la bienvenu
    merci d'avance

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A tout hasard, tu as essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=iso-8859-1");
    ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Bovino Voir le message
    A tout hasard, tu as essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=iso-8859-1");
    ?
    eh oui j'ai testé et ca ne marche pas
    comme je l'ai dit précedemment xmlHttprequest n'envoie que en utf-8 même si on essaye de le forcer
    je vous cite la ou j'ai lu ça et corriger moi si je me trompe

    Encodage des appels Ajax
    Avec Ajax, un problème supplémentaire surgit, car il faut encoder nous-mêmes les paramètres
    transmis, XMLHttpRequest n’encodant pas lui-même les paramètres au format
    application/x-www-form-urlencoded spécifié par HTTP. Or, nous n’avons en JavaScript
    aucune fonction à notre disposition pour faire cela. À la place, nous utilisons la fonction
    encodeURIComponent, qui transforme une chaîne en remplaçant ses caractères non ASCII
    par la séquence de leurs codes UTF-8. Par exemple, « é » est remplacé par %C3%A9 et
    « oe » par %C3%93.
    Si certains prétendent qu’Ajax « travaille en UTF-8 », cette affirmation semble bien
    hasardeuse. Si nous n’encodons pas nous-mêmes les caractères, le résultat transmis au
    serveur diffère d’un navigateur à un autre, IE ne transmettant pas en UTF-8. Par ailleurs,
    lorsque la réponse arrive sur le client, JavaScript se débrouille pour l’interpréter correctement,
    mais à la condition expresse que l’encodage soit défini dans l’en-tête de réponse
    Content-Type.Si nous encodons correctement les paramètres de la requête, grâce à encodeURIComponent,
    prenons bien garde que la valeur récupérée sur le serveur est encodée en UTF-8. Si tout
    notre système ne fonctionne pas en UTF-8, il nous faut alors décoder.
    donc si on résume sur le serveur je reçois les donnés en utf-8
    jusque la tout est bon ,si j'utilise une librairie pour decoder du utf-8 ca ne marche pas !!!!!! (peut etre la librairie n'est pas bonne si vous conaissez une !!)
    j'ai essayer de coder en HEXA coté client(en javascript) et decodé coté serveur mais ca ne marche pas pour des carécteres genre ƒ ô ...
    car la fonction n'est pas bijective mais je ne sais pas pkoi

    est ce que si je genere du xml coté client ca sera bien encodé coté serveur ?

    svp de l'aide ca fait 2 jous que je ne dors pas ,si je reussi pas ce truc je pourrais pas avancer ,car

  7. #7
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    J'ai retrouvé ça sur un vieux CD Visual Interdev... peut-être que cela t'aidera .

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <%
    option explicit 
     
    ' Simple functions to convert the first 256 characters 
    ' of the Windows character set from and to UTF-8.
     
    ' Written by Hans Kalle for Fisz
    ' http://www.fisz.nl
     
    'IsValidUTF8
    '  Tells if the string is valid UTF-8 encoded
    'Returns:
    '  true (valid UTF-8)
    '  false (invalid UTF-8 or not UTF-8 encoded string)
    function IsValidUTF8(s)
      dim i
      dim c
      dim n
     
      IsValidUTF8 = false
      i = 1
      do while i < len(s)
        c = asc(mid(s,i,1))
        if c and &H80 then
          n = 1
          do while i + n < len(s)
            if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then
              exit do
            end if
            n = n + 1
          loop
          select case n
          case 1
            exit function
          case 2
            if (c and &HE0) <> &HC0 then
              exit function
            end if
          case 3
            if (c and &HF0) <> &HE0 then
              exit function
            end if
          case 4
            if (c and &HF8) <> &HF0 then
              exit function
            end if
          case else
            exit function
          end select
          i = i + n
        else
          i = i + 1
        end if
      loop
      IsValidUTF8 = true 
    end function
     
    'DecodeUTF8
    '  Decodes a UTF-8 string to the Windows character set
    '  Non-convertable characters are replace by an upside
    '  down question mark.
    'Returns:
    '  A Windows string
    function DecodeUTF8(s)
      dim i
      dim c
      dim n
     
      i = 1
      do while i < len(s)
        c = asc(mid(s,i,1))
        if c and &H80 then
          n = 1
          do while i + n < len(s)
            if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then
              exit do
            end if
            n = n + 1
          loop
          if n = 2 and ((c and &HE0) = &HC0) then
            c = asc(mid(s,i+1,1)) + &H40 * (c and &H01)
          else
            c = 191 
          end if
          s = left(s,i-1) + chr(c) + mid(s,i+n)
        end if
        i = i + 1
      loop
      DecodeUTF8 = s 
    end function
     
    'EncodeUTF8
    '  Encodes a Windows string in UTF-8
    'Returns:
    '  A UTF-8 encoded string
    function EncodeUTF8(s)
      dim i
      dim c
     
      i = 1
      do while i < len(s)
        c = asc(mid(s,i,1))
        if c >= &H80 then
          s = left(s,i-1) + chr(&HC2 + ((c and &H40) / &H40)) + chr(c and &HBF) + mid(s,i+1)
          i = i + 1
        end if
        i = i + 1
      loop
      EncodeUTF8 = s 
    end function
    %>
    ERE
    Quand une tête pense seule, elle devient folle.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    merci remi pour ta réponse mais ca ne m'arrange pas car si l'utilisateur tape un carectére qui ne sera pas decodé ca va fausser tout mon site
    bref maintenant j'ai une autre aleternative c'est d'envoyer un fichier xml vers le serveur avec ajax
    sait tu comment convertir le fichier xml recu par le serveur en utf-8 en ISO 8859-1?

  9. #9
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    A part le charger avec MSXML et accéder ensuite aux données je ne vois pas d'alternative, car sinon on retombe dans le cas du décodage d'une chaine...

    Maintenant que tu as cerné le souci, as tu aussi pensé à déposer un post dans le forum ASP, peut-être que quelqu'un à une solution plus adaptée ?

    ERE
    Quand une tête pense seule, elle devient folle.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    c'est ce que j'ai fait mon ami remy
    http://www.developpez.net/forums/d85...-iso-8859-1-a/

    par contre j'ai toujours le même probléme car coté javascript je génére le xml
    quant je lui mets une entete utf-8 ou iso ca ne change rien je le récupére en UTF-8 coté serveur
    je n'arrive pas a trouver aucune astuce sur le net car tout le monde essaye de convertir en utf-8 pas decoder du utf-8
    pour le decodage de chaine j'y ai pensé mais ca sera mon derniers recours (le moins fiable aussi ) car la chaine est des fois codé sur 1,2 ou 3 octets

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    bonjour
    j'ai resolu mon probléme je vous mets la solution en esperant que ça aidera quelq'un

    coté javascript je génre un fichier xml (en utf-8 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     var strName = "élément";
     var xmlBody = "<entry>";
        xmlBody += "<name>" + strName + "</name>";
        xmlBody += "</entry>";
       xhr_object.send("<?xml version='1.0' encoding='utf-8'?>" + xmlBody);
    et coté serveur je declare que le format de retour est duiso-8859-1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     response.contentType = "text/html" 
     response.charset ="iso-8859-1"
    je recupére le fichier xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim objXML
     Set objXML = Server.CreateObject("Microsoft.XMLDOM")
     objXML.async = False
     objXML.Load request 
     dim objName
     Set objName = objXML.getElementsByTagName("name")
     response.write objName.item(0).text
    et la il me retourne élement
    aussi quant j'enregistre dans la base de donnée il m'enregistre dans le bon format


    Par contre il me reste un tout petit detail a reglé c'est qu'avec cette solution j'interroge chaque fois une page differente (ajax1.asp, ajax2.asp..) suivant la requete ajax que je vais faire , car je n'envoi qu'un fichier xml pas de paramétres ,
    je pense que je vais faire un noed qui definit le traitement a faire ,je lis sa valeur et suivant le paramétre passé je definis le traitement
    je vous tiens au courant les amis

  12. #12
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,



    Tu peux effectivement ajouter un noeud ou pourquoi pas ajouter un paramètre dans l'url (ajax.asp?action=1)
    Tu récupères action avec le request.QueryString et le doc xml avec request.Form

    ERE
    Quand une tête pense seule, elle devient folle.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,



    Tu peux effectivement ajouter un noeud ou pourquoi pas ajouter un paramètre dans l'url (ajax.asp?action=1)
    Tu récupères action avec le request.QueryString et le doc xml avec request.Form

    ERE
    bonne idée aussi je vais tester ,merci
    par contre tu peux m'expliquer stp la difference entre request ,request.querystring et request.form

  14. #14
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    QueryString accède aux paramètres passés en GET, Form à ceux passés en POST et si tu n'utilises que Request tu fusionnes les deux.

    ERE
    Quand une tête pense seule, elle devient folle.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    merci remy ,c'est un peu plus clair dans ma tête

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

Discussions similaires

  1. [ZF 1.10] Ajax et Zend pour mettre des données à jour d'un tableau
    Par absot dans le forum Zend Framework
    Réponses: 1
    Dernier message: 12/10/2011, 12h03
  2. Réponses: 1
    Dernier message: 24/12/2009, 13h41
  3. [AJAX] Cache, avec le rechargements des données.
    Par saidgrd dans le forum AJAX
    Réponses: 1
    Dernier message: 07/05/2009, 15h21
  4. probleme d'encodage des données
    Par tchimou dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/04/2007, 12h09
  5. encodage des données lors du post en AJAX
    Par jibouze dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 19/04/2006, 21h26

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