В этой статье
Что такое кодирование URL?
Кодирование URL (также называемое процентным кодированием) преобразует символы, которые небезопасны или зарезервированы в URL, в безопасный формат. Каждый небезопасный символ заменяется знаком % и следующим за ним двузначным шестнадцатеричным ASCII-кодом. Например, пробел становится %20, а амперсанд — %26.
URL может содержать только ограниченный набор ASCII-символов. Символы за пределами этого набора — включая пробелы, не-ASCII-буквы и специальные знаки — должны быть закодированы в процентном формате для безопасной передачи в URL.
Как работает кодирование URL
Кодировщик определяет символы, небезопасные для URL, и заменяет их процентно-кодированными эквивалентами.
- Определение безопасных символов — буквы, цифры и символы - _ . ~ остаются без изменений
- Обработка зарезервированных символов — ! * ' ( ) ; : @ & = + $ , / ? # [ ] кодируются в большинстве контекстов
- Поддержка Unicode — не-ASCII-символы сначала кодируются в UTF-8, затем каждый байт кодируется в процентном формате
Попробуйте бесплатно — без регистрации
Закодировать или декодировать URL →Когда применять кодирование URL
Кодирование URL необходимо всякий раз, когда специальные символы появляются в компонентах URL.
- Параметры запроса — кодируйте значения, передаваемые в строке запроса, особенно поисковые запросы, введённые пользователем
- API-запросы — кодируйте сегменты пути и параметры при программном построении URL для API
- Данные форм — кодируйте данные формы перед добавлением к URL в GET-запросах
Часто задаваемые вопросы
В чём разница между encodeURI и encodeURIComponent в JavaScript?
encodeURI кодирует полный URL и оставляет нетронутыми символы /, :, #, поскольку они несут структурный смысл в URL. encodeURIComponent кодирует отдельный компонент URL (например, значение параметра запроса) и процентно кодирует в том числе эти структурные символы. Для кодирования значений отдельных параметров всегда используйте encodeURIComponent.
Почему пробел иногда отображается как +, а не %20?
Формат application/x-www-form-urlencoded (используемый при отправке HTML-форм) кодирует пробелы как + вместо %20. Это устаревшее соглашение из ранних веб-стандартов. В строках запроса из HTML-форм + означает пробел; в других URL-контекстах используется %20. Оба варианта допустимы, однако выбор определяется контекстом.
Нужно ли кодировать весь URL или только его части?
Кодируйте только отдельные компоненты (сегменты пути, значения параметров запроса). Кодирование всего URL затронет и символы :, / и ?, которые определяют структуру URL, что сломает его. Правило: кодируйте значения, но не структурные символы, образующие URL.