解析查詢參數的意思是取出 URL 的查詢元件——也就是問號後面的文字,例如 tag=js&tag=api——並將其轉換成接收端程式碼可以使用的結構化資料,同時遵循 WHATWG application/x-www-form-urlencoded 規範中關於百分比跳脫、加號解碼為空白、以及重複參數名稱的規則。每一組配對會以第一個等號進行切分,百分比跳脫會解碼為字元,加號會變成字面上的空白,而出現多次的鍵名會保留為一個有順序的值清單,而不是被靜默覆寫。空值、缺少等號,以及出現在值內部而非作為分隔符號的保留字元,都是這份契約的一部分,必須在來回轉換後保持原樣,不能出現意外的變動。Query String Parser 工具直接在瀏覽器中以 URLSearchParams 模型實作這些規則,因此不會有任何查詢文字、JSON 或識別項離開你的電腦。了解確切的規則很重要,因為不同的伺服器對重複鍵的處理方式不同——有些保留第一個值,有些保留最後一個,還有些一律產生陣列——錯誤的假設會產生一個看起來有效、但對接收端而言意義不同的資料內容。

解析查詢參數實際上在做什麼
查詢元件是一連串以 & 符號分隔的扁平 key=value 配對。要妥善解析它,需要三個具體的行為:只在第一個等號處切分、使用 UTF-8 位元組解碼百分比跳脫,以及將字面上的加號視為空白。WHATWG URL 標準在第 6 節中為 URLSearchParams 定義了這些規則,而 MDN 也為瀏覽器內建的建構函式記錄了相同的實作方式。遵循這些規範可以讓解析後的值在重新編碼後,語意上仍等同於原始來源,不過百分比跳脫的拼寫方式以及加號與 %20 之間的選擇,會在序列化時被正規化。
前導的問號並不屬於資料本身,因此一個行為良好的解析器會容許它存在或不存在。同樣地,輸出結果應該是一個不含問號的純粹查詢元件,因為呼叫端可能需要單獨將它插入 URL、HTTP 請求主體、記錄檔測試資料或單元測試中。消除這種模糊性,正是讓結果在不同情境下都能保持可預測的原因。
為什麼專屬的解析器優於手寫程式碼
單純的 split("&") 再接著 split("=") 在最簡單的情況下可以運作,但在值包含保留字元、值為空、缺少等號,或是鍵重複時就會出錯。常見的失敗模式包括:
- 將加號視為字面上的字元,而不是空白
- 在每個等號處都進行切分,導致含有 = 的值被損壞
- 當資料結構實際上需要陣列時,卻丟掉重複鍵的後續出現項目
- 在呼叫端不小心貼上完整 URL 時,把完整 URL 的路徑誤認為是參數名稱的一部分
- 將鍵依字母順序排序,進而悄悄改變已簽章 URL 的簽章內容
專屬的解析器透過單一實作來處理這些邊角情況,一致地套用 WHATWG 的解碼規則,並回傳一個能反映線路格式實際內容的結構——也就是文字,而不是猜測的型別。
如何使用 Query String Parser 解析查詢參數
- 在瀏覽器中開啟 Query String Parser,選擇 query-to-JSON 方向進行解析,或選擇 JSON-to-query 方向進行建構。
- 將來源文字貼到輸入欄位中。解析時,請貼上帶或不帶前導問號的查詢元件。建構時,請貼上一個扁平的 JSON 物件,其值為字串、有限數字、布林值、null,或由這些純量組成的陣列。
- 執行轉換。工具會解碼百分比跳脫、將加號視為空白、保留空值,並將重複的參數名稱保持為有序的 JSON 陣列。
- 檢查輸出結果中的重複鍵(會以陣列形式呈現)與空值(會以空字串呈現),這樣你就能確切知道接收端會看到什麼。
- 複製輸出結果,並在使用它送往下游之前,先對將會接收它的 API 或端點進行驗證。
轉換規則:重複項目、空值與編碼
解析器遵循一組小而明確的規則,以確保輸出可預測。下表顯示每種輸入的處理方式。
| 輸入 | 行為 | 輸出 |
|---|---|---|
| tag=a&tag=b | 依出現順序保留重複的名稱 | "tag": ["a", "b"] |
| q=hello+world | 加號解碼為空白 | "q": "hello world" |
| name=John%20Doe | 解碼 UTF-8 百分比跳脫 | "name": "John Doe" |
| flag&ok=1 | 缺少等號視為空值 | "flag": "", "ok": "1" |
| note=a%26b | 已編碼的 & 符號保留在值內 | "note": "a&b" |
| ?page=2 | 移除前導的問號 | "page": "2" |
這些規則反向也同樣適用。空白會被序列化回加號,字面上的加號會被百分比編碼,以免被誤認為空白,而像 & 與 = 這類保留字元,當它們屬於值的一部分而非作為分隔符號時,會被進行百分比編碼。這裡不做任何型別推論:從查詢中解析時,文字 2 會保持為 JSON 字串 "2",因為線路格式承載的是文字,而不是數值型別的宣告。
從 JSON 建構查詢字串
在 JSON-to-query 方向,工具接受刻意限制的 JSON 結構:字串、有限的 JSON 數字、布林值、null,以及由這些純量值組成的陣列。巢狀物件與巢狀陣列會被拒絕,因為對於如何在查詢字串中表示巢狀資料,並沒有一致的標準——括號表示法、點號命名、索引命名,以及內嵌 JSON 都是互相競爭的慣例,猜測的結果會產生看起來有效、但對其他解析器意義不同的輸出。
空陣列會被省略,因為它們沒有可附加的值。null 會變成空值,而 JSON 數字與布林值則會轉為它們的文字形式。這樣能產生忠於來源的資料內容,並避免整數 2 在接收端被悄悄變成字串 "2"、或反之的陷阱。
何時不應重新編碼:已簽章的 URL 與快取鍵
排序、重建或正規化查詢參數,可能會破壞已簽章的 URL 與快取鍵。順序、重複出現、百分比跳脫的拼寫方式,以及加號與 %20 的選擇,都可能受到簽章的保護,因此改變其中任何一項,都會讓工具下游的簽章失效。除非簽章協定明確定義了標準化演算法,否則請保留原始的序列化位元組。
只要 URL 中包含針對查詢元件精確位元組所計算出來的 token、hash、signature 或 sig 參數,這項原則就適用。如果協定不明確,安全的做法是不修改查詢文字、直接複製,並使用該協定專屬的編碼器——或者,在沒有這類編碼器時,可使用 URL Parser 來檢查現有的元件,再進行任何修改。
限制、隱私與應驗證的事項
此工具在目前的分頁中將輸入上限設為 200,000 個字元,且完全在瀏覽器中執行,因此不會有任何查詢文字、JSON、權杖、識別項或 URL 被上傳到伺服器。即便如此,查詢字串經常帶有工作階段識別項、電子郵件地址、搜尋詞彙與追蹤值,而瀏覽器、記錄、 分析工具、代理伺服器、來源頁與伺服器記錄檔都可能獨立保存這些資料。在分享輸出結果之前,請先將敏感資料加以遮罩。
此解析器不會驗證完整的 URL、主機名稱、路徑、片段、簽章或授權政策。如果貼上的是完整 URL,其路徑可能會被誤認為是參數名稱的一部分,因此當你需要進行 URL 等級的驗證時,請先使用 URL 元件解析器。最後,在送出產生的資料之前,請先確認接收應用程式的契約,因為不同的框架在處理重複鍵、空值,以及保留字元的編碼方式上各有不同。