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

Linux Discussion :

Urlencode en PERL


Sujet :

Linux

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut Urlencode en PERL
    Bonjour à tous,

    Je cherche un one-liner pour "urlencoder" une chaîne en Perl.

    Voici ce que ça donne en PHP-CLI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    php -r 'print urlencode($argv[1]);' "Texte à urlencoder"
     
    # retourne --> Texte+%E0+urlencoder
    Je sais qu'il est possible de le faire en pur bash avec tr mais, en gros paresseux que je suis, je n'ai pas envie de me taper tout le mapping car->url car

    Ceci dit, si quelqu'un a ce mapping, je suis preneur aussi!

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    As tu essayé la méthode "bourrin" ?

    Encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
    Decodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
    En gros, si c'est pas une lettre ou un chiffre, on remplace par %XX où XX est le code ASCII du caractère, complèté à gauche par un zero, au besoin.

    C'est probablement un peu excessif ... on doit pouvoir ajouter "-", "/" et "." dans l'intervalle non traduit, et peut être d'autres trucs, mais je ne suis pas assez affuté en Web pour savoir lesquels.

    Bon courage.

    Sous la forme d'un uniligne, ça peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Texte à encoder" | perl -ane 'chomp;s/([^0-9A-Za-z.\/-])/sprintf("%%%02X",ord($1))/seg;print'

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Pas si bourrin que ça!

    Merci.

    Je me suis aussi attaqué à une solution pur bash, juste pour voir. Je ne te dis pas le tableau de mapping d'enfer! Si j'y arrive je posterai pour compléter ce fil pour ceux qui n'ont ni perl ni php installé.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut encodage url pur bash
    Voici donc la version pur bash (on a quand même besoin de sed !). Très verbeux, peu élégant comparé aux one-liners PHP et PERL posté plus haut mais bon, ça pourrait être utile pour des linux embarqués sans PHP ni PERL.

    @ 2Eurocents: Ceci est du vrai bourrin de chez bourrin!

    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
    #! /bin/sh
    # urlencode en bash
     
    # utilisation: urlencode.sh "Phrase à encoder héhé!"
     
    # tableau simplifié des caractères usuels attendus dans un url.
     
    SPEC_CAR=" !\"#$%&'()*+,/:;<=>?@[]^{|}~ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
     
     
    HEX[1]='+'   ; HEX[2]='%21' ; HEX[3]='%22' ; HEX[4]='%23' ; HEX[5]='%24'
    HEX[6]='%25' ; HEX[7]='%26' ; HEX[8]='%27' ; HEX[9]='%28' ; HEX[10]='%29'
    HEX[11]='%2A'; HEX[12]='%2B'; HEX[13]='%2C'; HEX[14]='%2F'; HEX[15]='%3A'
    HEX[16]='%3B'; HEX[17]='%3C'; HEX[18]='%3D'; HEX[19]='%3E'; HEX[20]='%3F'
    HEX[21]='%40'; HEX[22]='%5B'; HEX[23]='%5D'; HEX[24]='%5E'; HEX[25]='%7B'
    HEX[26]='%7C'; HEX[27]='%7D'; HEX[28]='%7E'; HEX[29]='%C0'; HEX[30]='%C1'
    HEX[31]='%C2'; HEX[32]='%C3'; HEX[33]='%C4'; HEX[34]='%C5'; HEX[35]='%C6'
    HEX[36]='%C7'; HEX[37]='%C8'; HEX[38]='%C9'; HEX[39]='%CA'; HEX[40]='%CB'
    HEX[41]='%CC'; HEX[42]='%CD'; HEX[43]='%CE'; HEX[44]='%CF'; HEX[45]='%D0'
    HEX[46]='%D1'; HEX[47]='%D2'; HEX[48]='%D3'; HEX[49]='%D4'; HEX[50]='%D5'
    HEX[51]='%D6'; HEX[52]='%D8'; HEX[53]='%D9'; HEX[54]='%DA'; HEX[55]='%DB'
    HEX[56]='%DC'; HEX[57]='%DD'; HEX[58]='%DE'; HEX[59]='%DF'; HEX[60]='%E0'
    HEX[61]='%E1'; HEX[62]='%E2'; HEX[63]='%E3'; HEX[64]='%E4'; HEX[65]='%E5'
    HEX[66]='%E6'; HEX[67]='%E7'; HEX[68]='%E8'; HEX[69]='%E9'; HEX[70]='%EA'
    HEX[71]='%EB'; HEX[72]='%EC'; HEX[73]='%ED'; HEX[74]='%EE'; HEX[75]='%EF'
    HEX[76]='%F0'; HEX[77]='%F1'; HEX[78]='%F2'; HEX[79]='%F3'; HEX[80]='%F4'
    HEX[81]='%F5'; HEX[82]='%F6'; HEX[83]='%F7'; HEX[84]='%F8'; HEX[85]='%F9'
    HEX[86]='%FA'; HEX[87]='%FB'; HEX[88]='%FC'; HEX[89]='%FD'; HEX[90]='%FE'
    HEX[91]='%FF'
     
    STR=$1
    LEN=${#STR}
    URLENCODED=''
    i=0
    for ((i=0; i < LEN ; i++))
    do
    	CAR=${STR:$i:1}
    	CAR=$(echo "$CAR" | sed -r 's/([+\(\)]|\[|\])/\\\1/g')
    	POS=$(expr index "$SPEC_CAR" "$CAR")
    	if [ $POS = 0 ]
    	then
    		URLENCODED=$URLENCODED$CAR
    	else
    		URLENCODED=$URLENCODED${HEX[$POS]}
    	fi
    done
    echo $URLENCODED

Discussions similaires

  1. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  2. [langage] Inclure de perl en c !!!
    Par ryo00 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2002, 10h03
  3. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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