URL query / repair handoff guide
URL queryの+・二重エンコード・同名keyを壊さず修正する
URLへ接続せず、修正前後のqueryを比較します。+、%2B、同名key、#fragmentを別の境界として扱います。
URL query / repair handoff guide
URLへ接続せず、修正前後のqueryを比較します。+、%2B、同名key、#fragmentを別の境界として扱います。
form風の解析では裸の+が空白として扱われることがあります。値に文字としてのプラスを残すなら%2Bを使い、受け側の契約を確認します。URLSearchParamsの表示だけで意図を逆算しないでください。
q=a%2Bb → literal plus: a+b
q=a+b → form-style interpretation may be a b
q=a%252Bb → double-encoded boundary; do not decode blindly| 修正前 | 修正後の方針 | 判定 |
|---|---|---|
q=a%2Bb | 文字としての+を維持する。 | preserve-plus |
q=a+b | 空白か文字+かを受け側へ確認する。 | confirm-space-or-plus |
q=a%252Bb | 何段階エンコードされた値か確認してから直す。 | decode-depth-check |
tag=a&tag=bのような同名keyは、勝手に最後の値だけへまとめません。順序と複数値を受け側の仕様へ渡します。#section以降はfragmentで、HTTP queryのkey=valueではありません。
| 境界 | 確認すること |
|---|---|
| duplicate-key | tag=a&tag=bを繰り返し値として保持し、順序を記録する。 |
| fragment-boundary | ?より後のqueryと#より後のfragmentを別欄にする。 |
| target URL | このガイドは対象URLへ接続せず、redirectやサーバー側の解釈を判定しない。 |
| case | 判定 | 確認 |
|---|---|---|
literal-plus | preserve-plus | %2Bを文字のプラスとして保持する。 |
form-plus-space | confirm-space-or-plus | 裸の+を空白と解釈する契約か確認する。 |
double-encoding | decode-depth-check | %252Bを一度に二段階復号しない。 |
duplicate-key | preserve-order | 同名keyの個数と順序を維持する。 |
fragment-boundary | keep-fragment-separate | fragmentをqueryへ混ぜない。 |
target-or-unsupported | reject | 対象URLへの接続や曖昧な修正方針は差し戻す。 |
このガイドは対象URLへ接続せず、redirect・認証・サーバー側のquery解釈を確認しません。本番URL、token、cookie、個人情報を貼り付けず、無害な例で修正方針を共有してください。
既存のURL query builderを開く(入力と変換は端末内で完了します)。