首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

URLEncoder/URLDecoder 正確處理 URL 參數特殊字元:Base64 編碼傳輸實戰指南

     編輯:Java 綜合教學

URLEncoder/URLDecoder 正確處理 URL 參數特殊字元:Base64 編碼傳輸實戰指南

URL 參數值若包含 / + = & % # 等特殊字元(如 Base64 密文),直接拼接會導致參數截斷或錯誤。本文詳細說明編碼/解碼正確姿勢與常見坑點。

問題場景

String cipher = "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==";
// 直接拼接
String url = "https://api.example.com?param=" + cipher;
// 伺服端接收到的 param 變為:
// "za4T8MHB/6mhmYgXB7IntyyOUL7Cl  0jv5rFxAIFVji8GDrcf k8g=="
// + 被解析為空格,/ 被誤判為路徑分隔

正確編碼流程

  1. 客戶端: 僅對參數值進行 URLEncoder.encode(value, "UTF-8")
  2. 伺服端: 獲取參數後 URLDecoder.decode(param, "UTF-8")
// 客戶端
String url = "https://api.example.com?param=" + URLEncoder.encode(cipher, "UTF-8");

// 伺服端
String param = request.getParameter("param");
String original = URLDecoder.decode(param, "UTF-8");

核心原則:只編碼值,不編碼整個 URL

// ✅ 正確
String q = "random word 攏500 bank $";
String url = "https://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");

// ❌ 錯誤:編碼整個 URL,破壞 ? & = 結構
String bad = URLEncoder.encode("https://example.com/query?q=value", "UTF-8");

// ❌ 錯誤:編碼 param=value 整體
String bad2 = URLEncoder.encode("param=value", "UTF-8");

原因: & 分隔參數,= 分隔鍵值,編碼後伺服端無法解析。

JavaScript 對應函數

函數用途編碼範圍
encodeURIComponent()編碼參數值除字母數字 - _ . ! ~ * ' ( ) 外全部
encodeURI()編碼完整 URL保留 ; , / ? : @ & = + $ # 等結構字元
escape()已棄用不支援 Unicode 完整編碼

前端傳參請使用 encodeURIComponent(value),後端 Java URLDecoder.decode 完美對應。

進階:Spring MVC 自動解碼

Spring MVC @RequestParam、@PathVariable 會自動解碼,無需手動 decode。若雙重解碼會導致 % 變為 %25 等錯誤。

避坑清單

  • 編碼/解碼字元集必須一致(推薦 UTF-8)。
  • 不要對已編碼的字串再次編碼。
  • 路徑參數(@PathVariable)含特殊字元需在前端 encodeURIComponent,後端自動解碼。
  • Cookie 值同樣需編碼,但 Cookie 類建構子會自動處理部分字元。

參考權威文檔:What every web developer must know about URL encoding

掌握「只編碼值」原則,URL 參數傳輸零故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved