UrlEncode — php-функция, которая подготавливает значение для использования его как часть html ссылки, заменяя спец. символы, кириллицу и т.п. на закодированные hex значения. Обычно так подготавливают GET параметры, передаваемые в url:
1 2 3 |
<?php echo '<a href="mypage?param=', urlencode($userString), '">'; ?> |
URLencode и массивы
Ф-ция urlencode работает только со скалярами. Если вам необходимо сформировать GET параметры из набора параметров (массива) или даже массива массивов, то следует воспользоваться более мощной функцией — http_build_query().
Сформируем ссылку из массива параметров и посмотрим, как эти данные вернутся в $_GET.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Тестовый массив содержит как скаляры, так и массивы $a = array( '1' => 'uno', '2' => 'duo', 'fruits' => array( '0' => 'apple', '2' => 'orange', '4' => 'plum', ), ); //формируем ссылку с помощью http_build_query() print "<a href=\"?" . http_build_query($a). "\">TEST</a>\n"; //при переходе по ссылке, выведем массив _GET print_r($_GET); |
URLencode и HTML FORM
Если нужно передать массив параметров в составе формы, как часть данных этой формы, то можно поступить двумя способами:
Передача данных через action
Так можно передать данные, только если установлен тип отправки данных — POST.
1 2 3 |
<form method="POST" action="?param=<?=urlencode($userString)?>" /> <input type="submit" value="Отправить" /> </form> |
или
1 2 3 |
<form method="POST" action="?<?=http_build_query($a)?>" /> <input type="submit" value="Отправить" /> </form> |
Если выбрать метод GET, то вместо параметров action в GET будут переданы данные самой формы.
Формирование полей формы
Для случая формы мы также можем сформировать набор «скрытых» полей. Никакие специальные функции PHP здесь не понадобятся, все придется делать самим.
У меня получилась вот такая функция для создания набора тегов input :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<? //params - массив параметров //name - это имя переменной для формы function encode_params($params, $name = 'data') { $out = array(); foreach($params as $k => $v) { $nm = $name . '[' . $k . ']'; if (is_scalar($v)) $out[] = '<input type="hidden" name="' . htmlspecialchars($nm) . '" value="' . htmlspecialchars($v). '"/>'; else $out[] = encode_params($v, $nm); } return implode("\n", $out); } ?> |
В качестве первого параметра она принимает массив данных. Второй параметр позволяет указать имя переменной. Функция работает рекурсивно, так что массив может быть многократно вложенным.
Добавим результат её работы в форму:
1 2 3 4 |
<form method="GET" /> <?=encode_params($a, 'prm')?> <input type="submit" value="Отправить" /> </form> |
В случае нашего массива $a, получим следующий html-код:
Urlencode online
Применение urlencode() очень узкое, на практике больше возникает необходимости в использовании http_build_query(). А в случае подготовки форм, так и вообще обе остаются не у дел.
Чтобы полностью закрыть вопросы с urlencode, предлагаю посмотреть как работает функция «вживую»:
Введите данные для обработки PHP URLencode():
Написать комментарий