Вебсправочник
Справочник JavaScript

encodeURIComponent(): кодирование отдельной части URL

EncodeURIComponent кодирует строку для использования как отдельное значение в URL. Он не предназначен для кодирования готового адреса целиком с сохранением его структуры.

Назначение

EncodeURIComponent кодирует строку для использования как отдельное значение в URL. Он не предназначен для кодирования готового адреса целиком с сохранением его структуры.

Как это работает

Зарезервированные разделители вроде амперсанда и слеша преобразуются в процентную запись. Пробел кодируется как %20. При построении строки запроса часто удобнее URLSearchParams, который сам управляет представлением параметров.

Пример

const value = "HTML & CSS";
const encoded = encodeURIComponent(value);
console.assert(encoded === "HTML%20%26%20CSS");
console.assert(decodeURIComponent(encoded) === value);
console.assert(encodeURIComponent("a/b") === "a%2Fb");
console.assert(encodeURIComponent("+") === "%2B");
console.log(encoded);

Что должно получиться

Кодированное значение не содержит необработанного амперсанда-разделителя. Обратное декодирование возвращает исходную строку. Пример не отправляет данные и не создаёт HTML.

Граница применения и частая ошибка

Процентное кодирование не защищает от HTML-инъекций и не является шифрованием. Не применяйте функцию повторно к уже кодированной строке без выбранного протокола. Некоторые некорректные UTF-16 последовательности вызывают URIError.

Самостоятельная проверка

Закодируйте одно значение с вопросительным знаком, слешем и символом процента. Затем сравните с кодированием целого адреса: объясните, какие разделители вы потеряли. Для формы выберите один способ сериализации, а не несколько подряд.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.