(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().