URL: кодирование / декодирование
Процентное кодирование и декодирование компонентов URL и строк запроса
Об этом инструменте
Символы вроде пробелов, амперсандов и не-ASCII букв не могут появляться в URL как есть, поэтому они кодируются процентами: пробел становится %20, 你 становится %E4%BD%A0. Этот инструмент кодирует текст для безопасного включения в URL и декодирует percent-экранированные строки обратно в читаемый текст, включая соглашение о + вместо пробелов, используемое в строках запроса.
Предлагаются два режима кодирования, потому что их два и в самом JavaScript: режим компонента (encodeURIComponent) экранирует всё, что могло бы разграничивать URL, — это то, что нужно для отдельного значения в строке запроса; режим полного URI (encodeURI) сохраняет структурные символы вроде /, ? и & — для случаев, когда вы кодируете целый URL, который должен оставаться рабочим.
Декодирование строго относится к некорректным последовательностям % — одинокий % или %ZZ выдаёт ошибку, а не молча пропускается, — именно так с ними обойдутся браузеры и серверы.
Частые вопросы
- Когда использовать режим компонента, а когда режим полного URI?
- Кодируете значение, которое попадёт внутрь URL (поисковый запрос, адрес редиректа, email в параметре) → режим компонента, чтобы & и = внутри значения не ломали строку запроса. Кодируете целый URL для показа или передачи → режим полного URI, чтобы структура URL сохранилась.
- Почему + иногда означает пробел?
- Формат application/x-www-form-urlencoded — используемый при отправке HTML-форм и в строках запроса — исторически кодирует пробелы как +. В путях URL + — это просто плюс. Декодер здесь трактует + как пробел, следуя семантике строк запроса; %20 работает везде и всегда.
- Почему моя строка закодирована дважды (%2520)?
- %25 — это кодировка самого символа %, поэтому %2520 означает, что текст %20 был закодирован второй раз. Так бывает, когда кодируют два слоя системы, каждый по разу. Декодируйте здесь дважды, чтобы развернуть, а затем исправьте слой, который не должен кодировать.
- Корректно ли обрабатываются символы Unicode?
- Да — текст сначала кодируется в UTF-8, и каждый байт экранируется процентом, согласно стандарту WHATWG URL. Именно поэтому один иероглиф CJK превращается в три группы %XX.