Перейти к основному содержимому

Как правильно кодировать параметры строки запроса

У инструмента два режима. «Компонент» (encodeURIComponent) предназначен для одного имени или значения параметра, «Полный URL» (encodeURI) — для целого URL с уже правильной структурой. Путаница между ними — самая частая причина сломанных строк запроса.

Разобранный пример

Режим «Полный URL» оставляет & внутри значения, и сервер видит два параметра вместо одного.

Ввод
https://example.com/search?q=salt & pepper&page=2
Результат · encodeURI()
https://example.com/search?q=salt%20&%20pepper&page=2

Параметры, которые читает сервер

  • "q" = "salt "
  • " pepper" = ""
  • "page" = "2"

Если сначала закодировать значение в режиме «Компонент», оно останется одним параметром.

Ввод
salt & pepper
Результат · encodeURIComponent()
salt%20%26%20pepper

https://example.com/search?q=salt%20%26%20pepper&page=2

Параметры, которые читает сервер

  • "q" = "salt & pepper"
  • "page" = "2"

Режимы «Компонент» и «Полный URL»: посимвольное сравнение

СимволКомпонентПолный URL
:%3A:
/%2F/
?%3F?
#%23#
&%26&
=%3D=
+%2B+
␠%20%20
é%C3%A9%C3%A9

Как это обрабатывает инструмент

  • Кодируйте каждое имя и значение параметра отдельно в режиме «Компонент», который экранирует & = ? # + и /.
  • Соединяйте закодированные пары вида имя=значение через & и добавляйте результат после ? в URL.
  • Используйте режим «Полный URL» только для целого URL: он сохраняет : / ? # & = + без изменений и потому не защищает значение, которое их содержит.

Руководства по кодированию URL