(PHP 4, PHP 5, PHP 7, PHP 8)
urlencode — Кодирует строку для безопасного включения в структуру URL-адреса
Функцией часто кодируют часть 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&bar=Not+the+same+content+as+Data123%21%40-_+%2B">
Замечание:
С PHP-переменными, значения которых совпадают с HTML-сущностями, работают осторожно. При разборе HTML-разметки браузер анализирует последовательности символов наподобие &, © и £ и преобразовывает именованные сущности в символы, которыми заменяет названия переменных в URI-идентификаторе. Это насущная проблема, о которой консорциум W3C рассказывает много лет. Подробнее об обработке символа амперсанда рассказывает страница: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2.
PHP поддерживает изменение разделителя аргументов URL-адресов на «точку с запятой», которую предложил W3C, через ini-директивы arg_separator. Бо́льшая часть пользовательских агентов не отправляет данные формы в формате с разделителем «точка с запятой». Поэтому в URL-адресах HTML-разметки лучше указывать разделитель &, а не &, чтобы обойти проблему несогласованной обработки URL-адресов. Для этого не потребуется изменять PHP-директивы arg_separator. При разделении аргументов символом & URL-адреса кодируют функциями htmlentities() или htmlspecialchars().