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

HttpServletRequest getParameter 自動 URL 解碼機制說明

     編輯:程式設計綜合問答

調用 request.getParameter("token") 獲得的值是已解碼的原始字符串,而非 URL 編碼後的形式。這是 Servlet 容器的標準行為。本文說明原理並給出驗證方法。

現象

請求 URL:

https://localhost:8080/hhh?token=k4gJH04aeHGqZG%2FomYYNUtReHBd3%2FL0pknT8D8b2rZhqRCh1XP6o8jfM9CIV49jb

獲取值:

k4gJH04aeHGqZG/omYYNUtReHBd3/L0pknT8D8b2rZhqRCh1XP6o8jfM9CIV49jb

明顯 %2F → / 等已被解碼。

原理

  • HTTP 協議規定 Query String 中的參數值採用 application/x-www-form-urlencoded 編碼
  • Servlet 容器(Tomcat、Jetty 等)在解析請求時,自動完成 URL 解碼
  • getParameter() 返回的是解碼後的「應用層數據」

編碼一致性關鍵點

  1. 客戶端發送時編碼字符集(UTF-8/GBK)
  2. 服務端解析時使用的字符集(request.setCharacterEncoding("UTF-8"))
  3. 兩者必須一致,否則中文參數會亂碼

若需原始編碼值

可從 request.getQueryString() 手動解析,或用 Filter 在解析前攔截原始 Query String。

結論:getParameter 返回已解碼值是正確且標準的行為,無需額外處理。

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