Rawurldecode: примеры (PHP)
rawurldecode(string $string): stringФункция rawurldecode в PHP
Функция rawurldecode() выполняет декодирование строки, закодированной в соответствии со стандартом RFC 3986. Она преобразует последовательности процентов, за которыми следуют два шестнадцатеричных цифры, обратно в соответствующие символы.
Функция применяется для обработки данных, полученных из URL, особенно когда важно сохранить плюсы (+) как литералы, а не преобразовывать их в пробелы. Это отличает rawurldecode() от функции urldecode().
Функция принимает один обязательный параметр:
- string - строка, подлежащая декодированию. Ожидается, что строка содержит процентные кодирования (например, %20 для пробела).
Возвращает декодированную строку или false в случае ошибки (хотя ошибки возникают редко).
Примеры использования rawurldecode
Декодирование простой строки с пробелом:
echo rawurldecode('Hello%20World');Hello World
Обработка строки с различными закодированными символами:
echo rawurldecode('%24%26%2B%2C%3A%3B%3D%3F%40');$&+,:;=?@
Сравнение поведения с обычной функцией urldecode():
echo 'rawurldecode: ' . rawurldecode('test+string') . "\n";
echo 'urldecode: ' . urldecode('test+string');rawurldecode: test+string urldecode: test string
Похожие функции в PHP
Декодирует URL-кодированную строку, преобразуя плюсы (+) в пробелы. Используется для данных, закодированных с помощью application/x-www-form-urlencoded.
Преобразует специальные HTML-сущности обратно в символы. Применяется для вывода HTML-безопасного текста.
Функцию rawurldecode() применяют при работе с путями URL, где плюс должен оставаться плюсом. Функцию urldecode() используют для декодирования данных форм, где плюс традиционно означает пробел.
Альтернативы в других языках
Rawurldecode в Python
Функция urllib.parse.unquote() с параметром encoding='utf-8':
from urllib.parse import unquote
print(unquote('Hello%20World%2B', encoding='utf-8'))Hello World+
Rawurldecode в Javascript
Метод decodeURIComponent() для декодирования компонентов URL:
console.log(decodeURIComponent('Hello%20World%2B'));Hello World+
Rawurldecode в MySQL
Функция UNHEX() в сочетании с REPLACE для простых случаев:
SELECT REPLACE('Hello%20World', '%20', ' ');Hello World
Типичные ошибки
Повторное применение функции к уже декодированной строке:
$str = 'test%20string';
echo rawurldecode(rawurldecode($str));test string
Ошибки не возникает, но второй вызов бесполезен.
Передача неправильно закодированных данных:
echo rawurldecode('test%2');test%2
Символы, не образующие полную процентную последовательность, остаются без изменений.
Использование с не-UTF8 строками без учета кодировки:
$str = rawurlencode(iconv('UTF-8', 'Windows-1251', 'тест'));
echo rawurldecode($str);������
Изменения в версиях PHP
Введена строгая типизация. Передача нестроковых значений теперь вызывает TypeError вместо их преобразования в строку.
echo rawurldecode(null);TypeError: rawurldecode(): Argument #1 ($string) must be of type string, null given
Устаревшие предупреждения при передаче неправильных типов, но с автоматическим преобразованием.
Расширенные примеры
Обработка query-строки с сохранением плюсов:
$query = 'city=Moscow%2BRegion&code=123%20456';
parse_str($query, $params);
foreach ($params as $key => $value) {
echo rawurldecode($key) . ': ' . rawurldecode($value) . "\n";
}city: Moscow+Region code: 123 456
Декодирование URL-путей с кириллицей:
$path = '/uploads/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82.pdf';
echo rawurldecode($path);/uploads/документ.pdf
Безопасное декодирование до получения стабильного результата:
function safeRawUrldecode($string) {
$decoded = rawurldecode($string);
while ($decoded !== $string) {
$string = $decoded;
$decoded = rawurldecode($string);
}
return $decoded;
}
echo safeRawUrldecode('test%2520space');test space
Декодирование anchor-ссылок:
$fragment = '%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%201';
echo '#' . rawurldecode($fragment);#Раздел 1