Как это работает
URL-кодирование (процентное кодирование) заменяет символы, которые не могут появляться в адресе буквально, последовательностями %XX со значением их байта. Например, пробел становится %20.
Область «Компонент» также экранирует зарезервированные символы (= & / ? #): используйте её для значения параметра. «Полный URL» сохраняет структуру адреса: используйте её для целого URL.
В HTML-формах пробел кодируется как + (application/x-www-form-urlencoded); во всех остальных случаях используется %20 согласно стандарту RFC 3986.
Примеры
hola mundo & máshola%20mundo%20%26%20m%C3%A1sСимвол «&» экранируется (%26), чтобы не спутать его с разделителем параметров; «á» кодируется в UTF-8 (%C3%A1).a=1&b=2a%3D1%26b%3D2https://sitio.com/á b?x=1 2URL completa: https://sitio.com/%C3%A1%20b?x=1%202В режиме «Полный URL» сохраняются ://, / и ?; экранируется только то, что нарушило бы адрес.Сценарии использования
- Собирать параметры запроса безопасно при ручном построении URL.
- Кодировать значения, содержащие &, =, пробелы или диакритику, перед отправкой в GET-запросе.
- Декодировать URL, чтобы прочитать, какие значения несёт каждый параметр.
- Подготовить тела application/x-www-form-urlencoded для отправки форм.
Часто задаваемые вопросы
В чём разница между «Компонент» и «Полный URL»?
«Компонент» (encodeURIComponent) также экранирует =, &, /, ?, # — для отдельного значения. «Полный URL» (encodeURI) сохраняет эти структурные символы — для целого URL.
Когда для пробела используется +, а когда %20?
Символ + применяется только в теле форм (application/x-www-form-urlencoded). В остальной части URL стандарт для пробела — %20.
Почему «á» превращается в %C3%A1, а не в один %XX?
Потому что он кодируется в UTF-8: символы вне ASCII занимают несколько байт, и каждый байт представлен своей последовательностью %XX.
Делает ли кодирование URL его безопасным?
Нет. Оно лишь делает его корректным на уровне синтаксиса. Это не шифрование и никак не защищает содержимое.