L'encodage d'URL "est une méthode pour encoder des informations dans un URI (Uniform Resource Identifier)" . Il est également appelé Encodage en pourcentage car les symboles de pourcentage sont utilisés pour encoder certains caractères réservés :
! | # | $ | % | & | ' | ( | ) | * | + | , | / | : | ; | = | ? | @ | [ | ] |
%21 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | %2A | %2B | %2C | %2F | %3A | %3B | %3D | %3F | %40 | %5B | %5D |
Cet article rassemble différentes façons de décoder une chaîne encodée URL. Commençons !
Python 2
$ alias urldecode='python -c "import sys, urllib as ul; \ print ul.unquote_plus(sys.argv[1])"' $ alias urlencode='python -c "import sys, urllib as ul; \ print ul.quote_plus(sys.argv[1])"'
Source
Voici un exemple d'utilisation :
$ urldecode 'q+werty%3D%2F%3B' q werty=/; $ urlencode 'q werty=/;' q+werty%3D%2F%3B
Python 3
$ alias urldecode='python3 -c "import sys, urllib.parse as ul; \ print(ul.unquote_plus(sys.argv[1]))"' $ alias urlencode='python3 -c "import sys, urllib.parse as ul; \ print (ul.quote_plus(sys.argv[1]))"'
Voici un exemple d'utilisation :
$ urldecode 'q+werty%3D%2F%3B' q werty=/; $ urlencode 'q werty=/;' q+werty%3D%2F%3B
Source
sed
$ sed 's@+@ @g;s@%@\\x@g' file | xargs -0 printf "%b"
Source
sed avec echo -e
$ sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' file | xargs echo -e
Source
sed avec un alias
Pour plus de commodité, vous pouvez utiliser un alias :
$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'
Si vous voulez décoder, vous pouvez maintenant simplement utiliser :
$ echo "http%3A%2F%2Fwww" | urldecode http://www
Source
Frapper
input="http%3A%2F%2Fwww" decoded=$(printf '%b' "${input//%/\\x}")
Source
Pour gérer les plus (+
) correctement, remplacez-les par des espaces en utilisant sed
:
decoded=$(input=${input//+/ }; printf "${input//%/\\x}")
Fonctions Bash + urlencode() + urldecode()
urlencode() { # urlencode <string> local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in [a-zA-Z0-9.~_-]) printf "$c" ;; *) printf '%%%02X' "'$c" ;; esac done } urldecode() { # urldecode <string> local url_encoded="${1//+/ }" printf '%b' "${url_encoded//%/\\x}" }
Origine :
- StackOverflow
- https://github.com/sixarm/urldecode.sh
bash + xxd
urlencode() { local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in [a-zA-Z0-9.~_-]) printf "$c" ;; *) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done esac done }
Origine :
- l'essentiel de cdown
- Débordement de pile
- Une autre source
PHP
$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin oil and gas
Source
Bibliothèque PHP
php -r 'echo urldecode("oil+and+gas");'
Source
Perl
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
Source
Perl pour traiter le fichier
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
Source
mauvais
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..
Origine :
- commentaire d'anon dans l'article StackOverflow
- Source
- Utiliser awk printf pour urldécoder le texte.
Python 2 urllib.unquote
Le urllib.unquote
est une fonction spéciale dans la bibliothèque standard intégrée de Python urllib
qui fait ce dont vous avez besoin :
decoded_url=$(python2 -c 'import sys, urllib; print urllib.unquote(sys.argv[1])' "$encoded_url")
Vous pouvez également l'utiliser pour modifier un fichier :
python2 -c 'import sys, urllib; print urllib.unquote(sys.stdin.read())' <file >file.new && mv -f file.new file
Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Python 3 urllib.parse.unquote
Si vous exécutez Python 3 sur votre système (comme la plupart des gens le feraient), utilisez la fonction alternative urllib.parse.unquote
. Pour vérifier votre version, consultez cet article.
decoded_url=$(python3 -c 'import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))' "$encoded_url")
Encore une fois, vous pouvez utiliser la fonction pour traiter un fichier comme suit :
python3 -c 'import sys, urllib; print(urllib.parse.unquote(sys.stdin.read()))' <file >file.new && mv -f file.new file
Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
URI Perl ::Échappement
Le URI::Escape
résout le problème du décodage d'URL pour les utilisateurs de Perl.
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
Vous pouvez utiliser la fonction pour traiter un fichier comme suit :
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Perl One-Liner sans installer de modules
$ perl -pe 's/\%(\w\w)/chr hex $1/ge'
Voici un exemple d'utilisation :
$ echo '%21%22' | perl -pe 's/\%(\w\w)/chr hex $1/ge' !"
Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Bash Regex
$ function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
Maintenant, vous pouvez utiliser la fonction comme une commande comme celle-ci :
$ urldecode https%3A%2F%2Fgoogle.com%2Fsearch%3Fq%3Durldecode%2Bbash https://google.com/search?q=urldecode+bash
Si vous devez affecter des variables, utilisez cette stratégie :
$ x="http%3A%2F%2Fstackoverflow.com%2Fsearch%3Fq%3Durldecode%2Bbash" $ y=$(urldecode "$x") $ echo "$y" http://stackoverflow.com/search?q=urldecode+bash
Source :https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell
GNU Awk
#!/usr/bin/awk -fn @include "ord" BEGIN { RS = "%.." } { printf "%s", $0 if (RT != "") { printf "%s", chr("0x" substr(RT, 2)) } }
Source :https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell
Références
- Urlencode et urldecode à partir d'une ligne de commande
- Décodage de l'encodage d'URL (encodage en pourcentage)
- Comment décoder une chaîne encodée en URL dans le shell ?
- https://gist.github.com/cdown/1163649
- Décodage d'URL Python sur la ligne de commande