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 :

Comportement bizarre for in


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 57
    Points
    57
    Par défaut Comportement bizarre for in
    Salut,

    Est-ce que quelqu'un parmis vous peut exécuter ce bout de code chez lui ou elle et m'expliquer pourquoi j'obtiens un tel résultat avec ma petite routine s'il vous plait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function cleanParam(pValue) {
        var rOut = pValue;
        tabCodes = new Array();
        tabCodes['?'] = '%3F';    		
        for (var iKey in tabCodes) {
            alert('key = '+iKey+'|valeur = '+tabCodes[iKey]);
    	//rOut = escape(rOut).replace(new RegExp("\\"+iKey,"g"),tabCodes[iKey]);
        }    		
        return rOut;
    }
     
    alert(cleanParam('test ?'));
    Si je commente le "Alert" (qui déjà est bien space) et dé-commente l'autre ligne je n'obtiens pas du tout ce que je souhaite.

    Evidemment ce que je voudrais obtenir est : "test %3F";

    Merci par avance !

    Benjamin.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    l'utilisation de charCodeAt() ne serait pas plus simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert("?".charCodeAt(0));
    retourne 63.

    Que souhaites-tu faire ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 57
    Points
    57
    Par défaut
    Non en fait la fonction exacte serait :

    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
    function cleanParam(pValue) {
        var rOut = pValue;
        <?php                     
              echo "tabCodes = new Array();";
              for($i=33;$i<47;$i++) {
                  $car = chr($i);
                  $js = ($i==39) ? "tabCodes['\\".$car."']" : "tabCodes['".$car."']";
                  $js.= " = '".urlencode($car)."';";
                  echo $js;                                 
              }                     
        ?>  		
        for (var iKey in tabCodes) {
           //alert('key = '+iKey+'|valeur = '+tabCodes[iKey]);
           rOut = escape(rOut).replace(new RegExp("\\"+iKey,"g"),tabCodes[iKey]);
        }    		
        return rOut;
    }
    Le but étant de transformer tous les caractères un peu spéciaux qui pourraient poser problème lors du passage de paramètres dans une requête Ajax (comme le "?" par exemple), par leur valeur encodée, sans me taper la liste des caractères à la main.

    Mais la boucle for in de javascript me fait un peu n'importe quoi et je ne sais pas pourquoi, il n'y a qu'à tester la fonction que j'ai posté dans le 1er message pour voir que le premier alert est bon, mais ensuite il me sort toute une liste d'Alert.

    Si je boucle sur mon tableau pour transformer mes caractères il me pond une chaine super longue qui ne correspond pas à mon encodage (%3F dans cet exemple)

    Voilà, si c'est assez clair

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 57
    Points
    57
    Par défaut
    Ah ben je viens de trouver

    C'est le escape() qui posait problème !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 57
    Points
    57
    Par défaut
    La fonction finale pour ceux que ça pourrait interesser :

    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
    function cleanParam(pValue) {
        var rOut = pValue;    		
        <?php                     
            echo "tabCodes = new Array();";
            for($i=33;$i<126;$i++) {
                if ((($i >= 33) && ($i <= 47))||(($i >= 58) && ($i <= 64))||(($i >= 91) && ($i <= 96))||(($i >= 123) && ($i <= 126))) {
                    $car = chr($i);                                 
                    $js = (($i==39)||($i==92)) ? "tabCodes['\\".$car."']" : "tabCodes['".$car."']";
                    $js.= " = '".urlencode($car)."';";
                    echo $js;
                }
            }                       
        ?>       		    		
        for (var iKey in tabCodes) {        
            rOut = rOut.replace(new RegExp("\\"+iKey,"g"),tabCodes[iKey]);
        }				
        return rOut;
    }

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Le but étant de transformer tous les caractères un peu spéciaux qui pourraient poser problème lors du passage de paramètres dans une requête Ajax (comme le "?" par exemple), par leur valeur encodée, sans me taper la liste des caractères à la main.
    Citation Envoyé par Delprog Voir le message
    Ah ben je viens de trouver

    C'est le escape() qui posait problème !
    bien justement pourquoi ne pas utiliser simplement escape() plutôt que de faire un replace ? Un truc m'échappe

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

Discussions similaires

  1. comportement boucle for bizarre
    Par maccormick dans le forum Général Java
    Réponses: 9
    Dernier message: 22/09/2010, 14h07
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

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