urlencode

(PHP 4, PHP 5, PHP 7, PHP 8)

urlencodeКодирует строку для безопасного включения в структуру URL-адреса

Описание

urlencode(string $string): string

Функцией часто кодируют часть URL-адреса с аргументами запроса, чтобы передавать переменные на следующую страницу.

Список параметров

string

Строка для кодирования.

Возвращаемые значения

Функция возвращает строку в которой каждый символ, кроме буквенно-цифровых и -_., заменила знаком %, за которым следует два шестнадцатеричных числа, а пробелы закодировала знаком +. Строка кодируется аналогично данным при отправке веб-формы с типом контента 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&amp;bar=Not+the+same+content+as+Data123%21%40-_+%2B">

Примечания

Замечание:

С PHP-переменными, значения которых совпадают с HTML-сущностями, работают осторожно. При разборе HTML-разметки браузер анализирует последовательности символов наподобие &amp, &copy и &pound и преобразовывает именованные сущности в символы, которыми заменяет названия переменных в URI-идентификаторе. Это насущная проблема, о которой консорциум W3C рассказывает много лет. Подробнее об обработке символа амперсанда рассказывает страница: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2.

PHP поддерживает изменение разделителя аргументов URL-адресов на «точку с запятой», которую предложил W3C, через ini-директивы arg_separator. Бо́льшая часть пользовательских агентов не отправляет данные формы в формате с разделителем «точка с запятой». Поэтому в URL-адресах HTML-разметки лучше указывать разделитель &amp;, а не &, чтобы обойти проблему несогласованной обработки URL-адресов. Для этого не потребуется изменять PHP-директивы arg_separator. При разделении аргументов символом & URL-адреса кодируют функциями htmlentities() или htmlspecialchars().

Смотрите также

  • urldecode() - Декодирует строку, закодированную для безопасного включения в структуру URL-адреса
  • htmlentities() - Преобразовывает возможные символы в HTML-сущности
  • rawurlencode() - URL-кодирование строки согласно RFC 3986
  • rawurldecode() - Декодирование URL-кодированной строки
  • » RFC 3986