Forum Programmation.web probleme de slash

Posté par  .
Étiquettes : aucune
0
16
août
2005
Bonjour tout le monde.

Je suis toujours en train d'ecrire un petit serveur web
de supervision reseau.

Et j'ai un nouveau souci.

Je pousse une variable qui contient des slashs grace
a la methode GET. La variable ressemblera toujours a ça:

site/salle/baie

mais les slashs sont affiché "%2F" et stocké aussi de la même façon.

Le probleme vient du serveur apache...?
PS: Mes scripts CGI sont en bash.
  • # j'ai eu le même problème en perl

    Posté par  . Évalué à 1.

    Je ne suis pas expert es CGI ni apache (loin de là), mais j'avais fait des CGI en perl et en effet, tous les caractères "spéciaux", tels slash, espace etaient codés comme ca. pour que apache puisse faire la différence entre http://adresse/site/salle/baie et http://adresse/<variable> avec variable = site/salle/baie.

    "Ma" solution : une fonction qui se chargeait de purifier le contenu des variables, à coups de s/%2F/\/g, s/%20/ /g, etc...
    • [^] # Re: j'ai eu le même problème en perl

      Posté par  . Évalué à 2.

      C'est ce vers quoi je me suis orienté, faute de mieux dans l'immediat, merci en tout cas...!!!
      • [^] # Re: j'ai eu le même problème en perl

        Posté par  . Évalué à 1.

        de rien :)

        d'ailleurs, je viens de voir que j'ai fait une coquille : s/%2F/\//g marchera mieux :)
        • [^] # Re: j'ai eu le même problème en perl

          Posté par  (site web personnel) . Évalué à 2.

          Ou bien de manière plus générique (toujours en Perl):
          s/%([a-f0-9]{2})/chr(hex($1))/egi

          Trouvé là (l'original est un peu plus complet): http://glennf.com/writing/hexadecimal.url.encoding.html(...)

          En pratique si c'est pour utiliser dans un script sh, on utilisera un truc du genre:
          $VAR=`echo $VAR | perl -pe's/%([a-f0-9]{2})/chr(hex($1))/eig'`

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # Re: j'ai eu le même problème en perl

            Posté par  . Évalué à 2.

            C'est trop genial...!

            Heu et ça fais quoi...?

            Serieusement, ça fais quoi, ça remplace tout les caractere comme
            il faut...?
            • [^] # Re: j'ai eu le même problème en perl

              Posté par  . Évalué à 1.

              si j'ai tout bien saisi, la regexp correspond à un truc du genre :
              -commence par "%"
              -les caractères de "A à F ou de 0 à 9" en double exemplaire
              on vient de définir la cible
              et on remplace par le caractère équivalent au code héxa du premier paramètre

              mais là, je dois avoir les grandes lignes, par exemple, je sais pas à quoi servent le e et le i dans egi, et je suis loin d'être sûr que chr permet de forcer le prototypage en caractère
            • [^] # Re: j'ai eu le même problème en perl

              Posté par  (site web personnel) . Évalué à 2.

              Oui.
              $ echo 'foo/bar.baz?quux=toto&titi=%C3%a9%2F%C3%A0%2f%21&tata=42' | perl -pe's/%([a-f0-9]{2})/chr(hex($1))/egi'
              foo/bar.baz?quux=toto&titi=é/à/!&tata=42
              On recherche les trucs qui correspondent à /%([a-f0-9]{2})/i. C'est à dire un pourcent suivi d'un répétition de deux caractères compris entre a et f ou 0 et 9. Donc du genre '%xx' avec "xx" des caractères héxadécimaux (le /i fait ignorer la casse donc "%Ac" par exemple correspond). Le truc qui a été "matché" est remplacé par chr(hex($1)), le $1 correspond à ce qui a été "matché" dans les parenthéses (donc le "xx"). Le /e fait en sorte que la chaine correspondante soit remplacée par le résultat de l'éxécution de la première partie. La fonction hex() converti une chaine de caractère représentant un nombre en héxadécimal en ce nombre et chr() retourne le caractère représenté par le nombre donné dans le charset courant. /g fait en sorte que toutes les occurences soient traitées (pas juste la première).

              Voire aussi:
              perldoc -f hex
              perldoc -f chr
              man perlre
              man perlop
              man perlrun
              man perlvar

              pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.