クエリ文字列のパラメーターを正しくエンコードする
このツールには 2 つのモードがあります。「コンポーネント」(encodeURIComponent)はパラメーター名または値 1 つ用、「完全な URL」(encodeURI)は構造がすでに正しい URL 全体用です。両者の取り違えは、クエリ文字列が壊れる最も一般的な原因です。
計算例
「完全な URL」モードでは値の中の & が残るため、サーバーは 1 つではなく 2 つのパラメーターとして読み取ります。
- 入力
- 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"
先に値を「コンポーネント」モードでエンコードすれば、1 つのパラメーターのまま保たれます。
- 入力
- 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 全体にのみ使用してください。: / ? # & = + をそのまま残すため、これらを含む値は保護できません。