url傳參特殊字元問題
function edit(zcname,xmname){
var empcode='${empcode}';
zcname=encodeURIComponent(zcname);
location.href = "toEditZclx.do?zcname=" + zcname+"&EmpCode="+empcode;
}
該段程式碼是將zcname,empcode引數使用url的方式傳遞到後臺toEditZclx.do中作為引數使用。
如果傳入的引數zcname或者empcode中存在特殊的字元,例如zcname=123&456,此時後臺request.
解決辦法
1.方法一
Java對文字進行編碼涉及3個函式:escape,encodeURI,encodeURIComponent
js中,你通過url傳值,需要這樣:
function updatePLChild(name){
//先對引數進行編碼
name = encodeURIComponent(name);
location.href="newLessonPlan.do?name="+name;
}
這樣的話,你傳的大多數帶特殊符號的引數,都能在後臺拿到,但是,
經過自己測試發現:
url中可能用到的特殊字元及在
# |
用來標誌特定的文件位置 |
%23 |
% |
對特殊字元進行編碼 |
%25 |
& |
分隔不同的變數值對 |
%26 |
+ |
在變數值中表示空格 |
%2B |
/ |
表示目錄路徑 |
%2F |
\ |
表示目錄路徑 |
%5C |
= |
用來連線鍵和值 |
%3D |
? |
表示查詢字串的開始 |
%3F |
空格 |
空格 |
%20 |
. |
句號 |
%2E |
: |
冒號 |
%3A |
假如你的引數是上方的url編碼值,比如%23、%25這些,那麼後臺接收到的值,就是其對應的字元。
比如傳值"%23",接收到的值就是
儘量避免此種傳值的情況的產生。
2.方法2
使用ajax,或者其他方式傳遞引數。