Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > hex


Автор: Семён Розовых 29.11.2002, 15:05
Рассматривая многие исходники , я часто обнаруживаю вот такую строчку
$val=~ s/%[0-9a-hA-H] {2}/pack('C',hex($1))/ge;

Я так понимаю - это символы, которые перекодируются в шестнадцатиричную систему. Но зачем? И почему только до h и H, а не весь алфавит?

Автор: NightGoblin 30.11.2002, 19:05
Это обработка CGI-запросов в формате application/x-www-urlencoded, в которой все символы, не входящие в \w (без локализации) преобразуются в коды вида %<код_символа> - например, %21 перекодируется в "!".

Странно только, почему A-Ha-h, а не A-Fa-f...

Автор: Семён Розовых 1.12.2002, 07:18
Таким макаром кодируются данные из формы. НО зачем? Что их так что ль просто нельзя обработать?

Автор: NightGoblin 1.12.2002, 17:50
Дело в том, что когда данные посылаются из формы, имена параметров и их значения, например, разделяются символом "=", а пары "параметр=значение" - символом "&". И если такие символы встретятся в значении параметра, то получится непонятная ситуация, при которой этот символ надо во что-нибудь преобразовать. Ну и, чтобы не было путаницы с кириллицей (в рунете т.е.) или другими спецсимволами (вообще), их так кодируют.

А строчка эта не кодирует, а разбирает закодированное значение параметра (если, конечно, val - это value :)).

Автор: HalkaR 8.12.2002, 07:11
На самом деле со всем этим добром сейчас разбираться не к чему. Есть такой хороший и удобный модуль CGI.pm, который сам разбирает запрос и перекодирует его.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)