前後端資料傳輸時,URL 編碼不一致是常見坑點。本文釐清 URLEncoder.encode(Java 後端)與 encodeURIComponent(JavaScript 前端)的核心差異。
encodeURIComponent 不編碼以下 5 個字元,而 URLEncoder.encode 會編碼:
| 字元 | encodeURIComponent | URLEncoder.encode |
|---|---|---|
| ! | ! (保留) | %21 |
| ' | ' (保留) | %27 |
| ( | ( (保留) | %28 |
| ) | ) (保留) | %29 |
| ~ | ~ (保留) | %7E |
decodeURIComponent 與 URLDecoder.decode 對這些字元的解碼結果一致,雙向相容。但若業務邏輯涉及「比對前後端編碼結果」(如簽名驗證、快取鍵生成),則會因編碼差異導致邏輯錯誤。
!'()~ 的測試用例必須納入回歸測試。理解此差異,能避免「明明內容相同,編碼卻不同」的困擾,保障前後端資料傳輸一致性。