Автор оригинала: Pythonista.
URL кодировка «Это метод для encode информация в едином идентификаторе ресурса (Ури) “ . Это также называется Процентное кодирование Поскольку процентные символы используются для кодирования определенных зарезервированных символов:
! | # | $ | % | & | ‘ | ( | ) | * | + | / | : | ; | = | ? | @ | [ | ] | |
%21 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | % 2А | % 2b. | % 2c. | % 2f. | % 3А | % 3B. | % 3D | % 3f. | %40 | % 5b. | % 5d. |
Эта статья собирает различные способы декодировать URL кодированная строка. Давайте начнем!
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])"'
Источник
Вот пример использования:
$ 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]))"'
Вот пример использования:
$ urldecode 'q+werty%3D%2F%3B' q werty=/; $ urlencode 'q werty=/;' q+werty%3D%2F%3B
Источник
север
$ sed 's@+@ @g;s@%@\\x@g' file | xargs -0 printf "%b"
Источник
САД с эхо -Е
$ sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' file | xargs echo -e
Источник
САД с псевдонимом
Для удобства вы можете использовать псевдоним:
$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'
Если вы хотите декодировать, теперь вы можете просто использовать:
$ echo "http%3A%2F%2Fwww" | urldecode http://www
Источник
Башмак
input="http%3A%2F%2Fwww" decoded=$(printf '%b' "${input//%/\\x}")
Источник
Правильно обрабатывать плюсы ( +
), замените их пробелами, используя Sed
:
decoded=$(input=${input//+/ }; printf "${input//%/\\x}")
Bash + URLENCODE () + URLDECODE () ФУНКЦИИ
urlencode() { # urlencodelocal 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 local url_encoded="${1//+/ }" printf '%b' "${url_encoded//%/\\x}" }
Источники:
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 }
Источники:
Папирофон
$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin oil and gas
Источник
PHP Библиотека
php -r 'echo urldecode("oil+and+gas");'
Источник
Перл
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
Источник
Perl для обработки файла
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
Источник
awk
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..
Источники:
- Анон комментарий в статье Stackoverflow
- Источник
- Использование AWK Printf в текст URLDECODE Отказ
Python 2 Urllib.unquote.
Urllib.unquote
Это специальная функция в встроенной стандартной библиотеке Python урлыб
это делает то, что вам нужно:
decoded_url=$(python2 -c 'import sys, urllib; print urllib.unquote(sys.argv[1])' "$encoded_url")
Вы также можете использовать его, чтобы изменить файл:
python2 -c 'import sys, urllib; print urllib.unquote(sys.stdin.read())'file.new && mv -f file.new file
Источник: https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Python 3 Urllib.parse.unquote.
Если вы запустите Python 3 в вашей системе (например, большинство людей), используйте альтернативную функцию Urllib.parse.unquote
Отказ Чтобы проверить вашу версию, посетите Эта статья Отказ
decoded_url=$(python3 -c 'import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))' "$encoded_url")
Опять же, вы можете использовать функцию для обработки файла следующим образом:
python3 -c 'import sys, urllib; print(urllib.parse.unquote(sys.stdin.read()))'file.new && mv -f file.new file
Источник: https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Perl Uri:: Escape
URI:: Escape
Решает проблему декодирования URL для пользователей Perl.
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
Вы можете использовать функцию для обработки файла следующим образом:
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
Источник: https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Perl одноклассник без установки модулей
$ perl -pe 's/\%(\w\w)/chr hex $1/ge'
Вот пример использования:
$ echo '%21%22' | perl -pe 's/\%(\w\w)/chr hex $1/ge' !"
Источник: https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
Bash Regex.
$ function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
Теперь вы можете использовать функцию как такую команду:
$ urldecode https%3A%2F%2Fgoogle.com%2Fsearch%3Fq%3Durldecode%2Bbash https://google.com/search?q=urldecode+bash
Если вам нужно назначить некоторые переменные, используйте эту стратегию:
$ x="http%3A%2F%2Fstackoverflow.com%2Fsearch%3Fq%3Durldecode%2Bbash" $ y=$(urldecode "$x") $ echo "$y" http://stackoverflow.com/search?q=urldecode+bash
Источник: 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)) } }
Источник: https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell
использованная литература
- URLENCODE и URLDECODE из командной строки
- Декодирование URL-кодировки (процентное кодировка)
- Как декодировать URL-кодированную строку в оболочке?
- https://gist.github.com/cdown/1163649
- Python Urdecode в командной строке
Оригинал: “https://blog.finxter.com/url-decoding-methods/”