遇到一個問題
在一個地址鏈接(URL)里使用 url?param1=val1¶m2=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)