請求(Request)的參數(Parameter)里包含特殊字符(#等)的正確處理方式


遇到一個問題

在一個地址鏈接(URL)里使用  url?param1=val1&param2=val2  的方式傳遞參數,結果在獲取參數值時發現不是當初設定的值。

 

具體案例

以特殊字符井號(#)為例。

 

部分參數值丟了

JS里設置參數

window.location="some_web_project/xxx.jsp?param_key=abc#xyz";

 

Java中取參數值

Sting paramVal = request.getParameter("param_key");

 

你會發現在 Java 中取到的值,不是設定的  abc#xyz ,而是  abc 。井號后面的值沒了,包括井號本身。

為什么呢?

網上查了下,URL中的井號(#)有其特殊的含義,表示位置(錨點)。

那怎么辦呢?參數里就是有特殊字符,怎么才能拿到數據呢?

解決之道

先給參數值編碼,再傳遞即可。

將上面的JS代碼改為

1 var param_val = encodeURIComponent("abc#xyz");
2 window.location="some_web_project/xxx.jsp?param_key=" + param_val;

 

 

小結

如果請求(Request)的參數(Parameter)里包含特殊字符,記得將參數值編碼  encodeURIComponent(SPECIAL_VALUE) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM