urlencode и urldecode в Perl

Закодированный URL
В PHP есть встроенные функции для кодирования и декодирования строк для URL-ов, но в Perl их нет.
Вот самый простой путь кодирования строк для передачи их в URLы:
$str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
Теперь можно спокойно подставлять $str в ссылку:
<a ref="file.php?param=$str">Какой-то линк</a>

Декодировать полученную сроку можно так:
$str =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;

А для ленивых существует специальный модуль URI::Escape.
Подключаем его к проекту:
use URI::Escape;
И кодируем/декодируем URLы функциями uri_escape () и uri_unescape ():
$str = uri_escape("Какая-то строка");
print uri_unescape($str);

Скачать пример

Поблагодарить автора

3 Responses to urlencode и urldecode в Perl

  1. Способ на основе регулярных выражений хорош. Второй способ более красивый, но выдает предупреждение «Parsing of undecoded UTF-8 will give garbage when decoding entities at .../LWP/Protocol.pm line 114». В чем проблема?

  2. При использовании первого и второго варианта выдает предупреждение:

    Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib64/perl5/vendor_perl/5.8.8/LWP/Protocol.pm line 114.

    Что делать?

  3. Попробуйте сначала применять к данным encode_utf8:

    use Encode;

    $str = uri_escape (encode_utf8 («Какая-то строка»));

    print uri_unescape ($str);

Оставить комментарий

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>