urlencode и urldecode в Perl

Категория: Perl Комментариев: 3

Закодированный 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);

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

Автор: Кто-то   @   1 июля 2009 Комментариев: 3
Метки : , ,

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

Webmoney Z163628999150, R617151845974

Комментариев: 3

Комментарии
Апр 7, 2010
9:33

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

Апр 7, 2010
14:00

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

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.

Что делать?

Автор Апр 7, 2010
20:33

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

use Encode;

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

print uri_unescape ($str);

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

Предыдущая запись
«
Следующая запись
»