array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.urlencode.php', 1 => 'urlencode', ), 'up' => array ( 0 => 'ref.url.php', 1 => 'Функции URL', ), 'prev' => array ( 0 => 'function.urldecode.php', 1 => 'urldecode', ), 'next' => array ( 0 => 'book.v8js.php', 1 => 'V8js', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/url/functions/urlencode.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
urlencode — URL-кодирует строку
Функция кодирует строку, которая будет использоваться в части запроса URL-адреса, что упрощает передачу переменных на следующую страницу.
string
Строка, которая будет закодирована.
Функция возвращает строку, в которой символы, кроме буквенно-цифровых и -_.
,
были заменены знаком процента (%
), за которым следует
два шестнадцатеричных числа, а пробелы закодированы как знак
сложения (+
).
Строка кодируется тем же способом, что и POST-данные веб-формы, то есть по
типу контента application/x-www-form-urlencoded
. Это
отличается от кодирования по стандарту » RFC 3986
(смотрите описание функции rawurlencode() ) тем, что по историческим причинам
пробелы кодируются как знак «плюс» (+).
Пример #1 Пример использования функции urlencode()
<?php
$userinput = 'Data123!@-_ +';
echo "Пользовательские данные: $userinput\n";
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
Результат выполнения приведённого примера:
Пользовательские данные: Data123!@-_ + <a href="mycgi?foo=Data123%21%40-_+%2B">
Пример #2 Пример использования функций urlencode() и htmlentities()
<?php
$foo = 'Data123!@-_ +';
$bar = "Содержание, которое отличается от значения $foo";
echo "foo: $foo\n";
echo "bar: $bar\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
Результат выполнения приведённого примера:
foo: Data123!@-_ + bar: Содержание, которое отличается от значения Data123!@-_ + <a href="mycgi?foo=Data123%21%40-_+%2B&bar=Not+the+same+content+as+Data123%21%40-_+%2B">
Замечание:
Соблюдают осторожность с переменными, которые совпадают с HTML-сущностями. Мнемоники наподобие &, © и £ браузер разбирает и использует как реальные сущности, а не как имя переменной. Это известная проблема, о которой консорциум W3C рассказывает людям много лет. Подробнее рассказано по ссылке: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2
PHP поддерживает изменение разделителя аргументов на «точку с запятой», которую предложил W3C, через ini-директиву arg_separator. К сожалению, бо́льшая часть пользовательских агентов не отправляют данные формы в формате, разделённые «точкой с запятой». Более переносимый способ обойти проблему — использовать разделитель & вместо &. Не нужно для этого изменять PHP-директиву arg_separator. Оставьте разделитель &, но кодируйте URL-адрес функциями htmlentities() или htmlspecialchars().