(PHP 4, PHP 5, PHP 7, PHP 8)
urlencode — URL-кодирование строки
$string
): stringЭта функция удобна, когда закодированная строка будет использоваться в запросе, как часть 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 символ "точку с запятой" путём изменения директивы arg_separator в .ini файле. К сожалению, большинство пользовательских приложений не отправляют данные формы в формате с разделителем "точка с запятой". Более переносимый способ решить эту проблему - это использовать & вместо & в качестве разделителя. Вам не нужно будет для этого изменять PHP-директиву arg_separator. Оставьте разделитель как &, но кодируйте ваши URL с помощью htmlentities() или htmlspecialchars().