Кодирование URL
Текст ↔ percent-encoding
Поля связаны. encodeURIComponent — для значения параметра,
encodeURI — для готового адреса, «Форма» — как в
application/x-www-form-urlencoded (пробел как +).
Зачем кодировать URL
В адресе и в query-строке нельзя свободно ставить пробелы, кириллицу и служебные
знаки. Percent-encoding заменяет их на последовательности вида
%D0%BF, чтобы браузер и сервер прочитали исходный текст однозначно.
Ошибка в выборе режима даёт другой результат: если закодировать весь URL как один параметр, слэши и «?» тоже превратятся в проценты, и ссылка перестанет быть адресом.
Частые вопросы
Текст уходит на сервер?
Нет. Кодирование и декодирование выполняются в браузере, запрос на сервер не отправляется.
Когда нужен encodeURIComponent, а когда encodeURI?
encodeURIComponent кодирует весь текст, включая «?», «&» и «=», и подходит для одного параметра. encodeURI оставляет разделители адреса и кодирует только небезопасные символы в уже собранном URL.
Что делает режим формы?
application/x-www-form-urlencoded кодирует как encodeURIComponent, но пробел записывается знаком «+», как в HTML-формах.