URL-кодирование
Преобразуй спецсимволы в процентный формат для безопасной передачи в ссылках.
Адресная строка поддерживает строго ограниченный набор знаков. Любые пробелы, амперсанды, вопросительные знаки или нелатинские буквы нужно переводить в процентный формат, иначе веб-адрес просто перестанет открываться или вызовет непредвиденный сбой сервера.
Зачем нужно URL-кодирование спецсимволов
Ряд знаков выполняет в структуре веб-адреса служебную роль: знак ? начинает строку запроса, & разделяет переданные параметры, знак = отделяет ключ от его значения, а символ # указывает на фрагмент страницы.
Если передать обычный амперсанд внутри самого значения параметра — например, в названии компании вроде Smith & Sons, — сервер примет его за начало следующего параметра. Значение обрежется на первом слове, а рядом появится пустой безымянный параметр. Кодирование символа в виде %26 однозначно сообщает обработчику, что перед ним пользовательские данные, а не разделитель структуры.
Как выполнить URL-кодирование текста
- Вставь исходную строку в поле ввода.
- Нажми кнопку кодирования для отправки запроса.
- Скопируй готовый результат и подставь его в параметр запроса или путь ссылки.
- Кодируй значения параметров по отдельности, не отправляй в обработку адрес целиком.
- Используй декодер, если нужно разобрать и прочитать готовую ссылку с экранированными знаками.
Частые символы при URL-кодировании
| Символ | Код | Значение |
|---|---|---|
| space | %20 or + | Ломает ссылку во многих контекстах |
| & | %26 | Иначе воспринимается как разделитель параметров |
| ? | %3F | Иначе воспринимается как начало строки запроса |
| = | %3D | Иначе воспринимается как разделитель ключа и значения |
| # | %23 | Весь последующий хвост считается фрагментом |
| / | %2F | Иначе воспринимается как разделитель сегментов пути |
| + | %2B | Иначе может ошибочно декодироваться как пробел |
Обработка отдельных фрагментов при URL-кодировании
Самая распространенная ошибка — вставить в форму готовую ссылку от начала до конца. В таком случае алгоритм превратит служебную конструкцию :// и привычные косые черты в процентные коды, сделав результат абсолютно нечитаемым для веб-сервера.
Правильный подход — обрабатывать каждое значение изолированно, собирая итоговую ссылку уже после этого шага. Например, в языке JavaScript для значений переменных предназначен вызов encodeURIComponent(), тогда как функция encodeURI() служит лишь для обработки пути ссылки целиком.
Вопросы о URL-кодировании
Что представляет собой этот процентный формат?
Это схема представления символа знаком процента и шестнадцатеричным кодом его байта. Так, пробел превращается в %20, поскольку число 20 служит кодом пробела в таблице ASCII.
Почему пробел иногда превращается в плюс?
Исторически веб-формы HTML при отправке параметров кодировали пробелы знаком +. Значение %20 подходит для любых участков ссылки, а знак + допустим только в блоке запроса.
Чем различаются методы encodeURIComponent и encodeURI?
Функция encodeURIComponent экранирует все специальные знаки и используется для отдельных значений, а encodeURI применяется к готовым адресам и сохраняет служебные разделители.
Как обрабатываются символы не из латиницы?
Они сначала переводятся в байты UTF-8, после чего каждый полученный байт записывается через знак процента. Из-за этого одна буква алфавита часто дает сразу две процентные последовательности.
Что произойдет при повторном кодировании строки?
Это приведет к скрытой ошибке: готовая последовательность %20 превратится в %2520, и после однократной расшифровки на стороне сервера в данных останется буквальный текст %20.