decodeURIComponent(): обратное преобразование и ошибка повреждённой строки
DecodeURIComponent преобразует процентную запись обратно в текст. Вход должен быть корректным для выбранного формата, иначе операция может завершиться исключением.
Назначение
DecodeURIComponent преобразует процентную запись обратно в текст. Вход должен быть корректным для выбранного формата, иначе операция может завершиться исключением.
Как это работает
Функция обрабатывает кодированные байты как UTF-8, но не превращает обычный плюс в пробел. Такое правило относится к отдельному формату параметров формы и уже учитывается URLSearchParams.
Пример
console.assert(decodeURIComponent("HTML%20%26%20CSS") === "HTML & CSS");
console.assert(decodeURIComponent("a+b") === "a+b");
console.assert(new URLSearchParams("q=a+b").get("q") === "a b");
let rejected = false;
try { decodeURIComponent("%E0%A4%A"); } catch (error) { rejected = error instanceof URIError; }
console.assert(rejected);
console.log("Повреждённая строка обработана отдельно");
Что должно получиться
Корректная последовательность декодируется, обычный плюс сохраняется, а повреждённая строка вызывает обработанную URIError. Это разные случаи, а не повод бесконечно повторять декодирование.
Граница применения и частая ошибка
Декодирование уже разобранного searchParams значения может испортить смысл или вызвать ошибку на буквальном проценте. Нельзя повторять декодирование до исчезновения всех знаков %. Полученный текст всё ещё нельзя вставлять в HTML без безопасного вывода.
Самостоятельная проверка
Проверьте строки с буквальным %, корректным %25 и повреждённой последовательностью. Для каждой запишите, на каком этапе приложения она находится. Обрабатывайте ошибку явно и не подменяйте некорректный ввод незаметно другим значением.
Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.