Как правильно кодировать параметры строки запроса
У инструмента два режима. «Компонент» (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: он сохраняет : / ? # & = + без изменений и потому не защищает значение, которое их содержит.