Разбор строки запроса в кодировке URL, декодирование имен и значений параметров

Переданную пользователем информацию в кодировке URL необходимо разобрать на имена и значения параметров, а также декодировать. Рассмотрим фрагмент Perl-кода, позволяющий осуществить названные преобразования.
01 @query = split('&', $query);
02 foreach $element(@query)
03 {
04 @fields = split('=', $element);
05 $fields[0] =~ s/\+/ /g;
06 $fields[0] =~ s/%([0-9A-F]{2})/pack('C', hex($1))/eg;
07 $fields[1] =~ s/\+/ /g;
08 $fields[1] =~ s/%([0-9A-F]{2})/pack('C', hex($1))/eg;
09 $userdata{$fields[0]} = $fields[1];
10 }
В первой строке функция split() используется для того, чтобы разбить строку $query вида пара¬метр_1=зна¬чение_1&пара¬метр_2=зна¬чение_2&...&пара¬метр_N=зна¬чение_N на массив элементов @query: параметр_1=значение_1, параметр_2=значение_2, …, параметр_N=значение_N, руководствуясь разделителем — символом амперсанда (&).
Вторая строка начинает цикл, в теле которого происходит обработка каждого из элементов массива @query.
В четвертой строке каждый элемент массива @query (строка вида параметр_K=значение_K) разбивается на массив элементов @fields: параметр_K, значение_K, руководствуясь разделителем — знаком равенства (=).
В пятой строке при помощи регулярного выражения в первом элементе массива @fields происходит замена всех знаков «+» на пробелы.
В шестой строке более сложное регулярное выражение используется для замены шестнадцатеричных кодов формата %XY на соответствующие им символы. Для этого применяется функция pack(), упаковывающая шестнадцатеричные коды в байтовые строки. Функция pack() допускает большое количество различных режимов работы, но останавливаться на них в рамках этой книги мы не будем.
Седьмая и восьмая строки повторяют преобразования, производимые в пятой и шестой строках, для второго элемента массива @fields.
Отныне первый элемент массива @fields содержит декодированное имя пользовательского параметра параметр_K, а второй элемент массива — декодированное значение этого параметра значение_K.
Декодированные имена и значения параметров в девятой строке записываются в хэш %userdata. Обратившись из любого места программы к элементу $userdata{'параметр_K'}, мы получим значение_K. Не правда ли, удобно?


© 2008-2018 ОптимизацияВебСайтов.ру


Любое использование текстового и графического контента сайта без активной ссылки на источник не доскается.