Способы url decode

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
olecya
Сообщения: 666
ОС: debian, fedora (i3-wm)

Способы url decode

Сообщение olecya »

Собственно далеко кодить не будем вот эта строчка из соседней темы
Наглая ложь в технической документации Microsoft

Код: Выделить всё

str="%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0-%D1%87%D0%B8%D1%81%D0%B5%D0%BB-%D0%BD%D0%B0-%D0%BE%D0%B4%D0%BD%D0%BE-%D0%B8-%D1%82%D0%BE-%D0%B6%D0%B5-%D1%87%D0%B8%D1%81%D0%BB%D0%BE"
Думаю можно найти оригинальные решения. Кому интересно присоединяйтесь.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Способы url decode

Сообщение azsx »

echo %D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0-%D1%87%D0%B8%D1%81%D0%B5%D0%BB-%D0%BD%D0%B0-%D0%BE%D0%B4%D0%BD%D0%BE-%D0%B8-%D1%82%D0%BE-%D0%B6%D0%B5-%D1%87%D0%B8%D1%81%D0%BB%D0%BE | php -r 'echo urldecode(fgets(STDIN));'
Вот так? Неохота читать флудную тему.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Способы url decode

Сообщение Bizdelnick »

Когда-то писал такое для кодирования:

Код: Выделить всё

urlencode() {
  iconv -t utf-8 | perl -nwe 'print join "", map { /([[:alnum:]\/.:_-])/ ? $_ : sprintf("%%%02x",ord($_)) } split //;'
}

Код: Выделить всё

urlencode() {
  iconv -t utf-8 | \
    env LC_CTYPE=C awk '
      BEGIN {
        RS = ""
        ORS = ""

        for (i = 0; i <=255; i++) {
          t = sprintf("%c", i)
          if (t ~ /[a-zA-Z0-9\/.:_-]/) {
            map[t] = t
          } else {
            map[t] = sprintf("%%%02X", i)
          }
        }
      }

      {
        len = split($0, c, "")
        for (i = 1; i <= len; i++) {
          print(map[c[i]])
        }
    }'
}
Декодирование по аналогии сделать несложно.
Последний раз редактировалось Bizdelnick 13.05.2021 19:36, всего редактировалось 1 раз.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 666
ОС: debian, fedora (i3-wm)

Re: Способы url decode

Сообщение olecya »

Я тож вот тут набросала на мой взгляд 2 интересных варианта и попробую далее распарсить:

Код: Выделить всё

echo ${str//[%-]} | xxd -r -ps
умножениестолбцачиселнаодноитожечисло
echo ${str//[%-]} | dc -e '16i?P'
умножениестолбцачиселнаодноитожечисло
Добавлено (18:10):
xxd имеет ограниченную длину строки, а калькулятор подрос на один пайп:

Shell

echo ${str//-/2D} | xxd -r -p
умножение-столбца-чисел-на-одно-и-то-же-число

Shell

echo ${str//-/2D} | tr -d % | dc -e '16i?P'
умножение-столбца-чисел-на-одно-и-то-же-число
Добавлено (18:19):
Классика сработала лучше, чем все остальное, даже с переводом строки

Shell

printf "%b\n" ${str//%/\\x}
умножение-столбца-чисел-на-одно-и-то-же-число
Но я первоначально делала через sed
Последний раз редактировалось olecya 13.05.2021 20:00, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 666
ОС: debian, fedora (i3-wm)

Re: Способы url decode

Сообщение olecya »

Bizdelnick
Буквально недавно задумалась как в функцию перенаправить stdin. Спасибо
Добавлено (20:08):
Нашла на стакиксчейндж, люблю команду echo и не люблю кавычки:

Shell

echo -e ${str//%/\\x}
умножение-столбца-чисел-на-одно-и-то-же-число
Спасибо сказали: