encodeURIComponent編碼后java后台的解碼 (AJAX中文解決方案)
同學的畢業設計出現JavaScript用encodeURIComponentt編碼后無法再后台解碼的問題。
原來他是這樣寫的:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(seartext);
java處理的代碼為:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要處理異常*/
咋一看覺的沒問題啊,一編一解的,應該可以了。但還是出現了亂碼。
后來網搜資料,發現原來在對后台java程序里的searchtext賦值的時候,本身已經使用了一次解碼,不過解碼的結果依然不對。所以我們可以在頁面上進行兩次編碼操作,這樣后台自動的那次就可以抵消掉一次,然后在使用searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要處理異常*/進行一次解碼就好了。
正確的代碼:
JavaScript:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encodeURIComponent(seartext));
java:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要處理異常*/
另外還有一種方法是JavaScript進行一次編碼,后台java處理時換種想法就好了:
java代碼:
String s = new String(request.getParameter("name").getBytes("ISO8859-1"), "UTF-8");
//--------------------------------我使用的方法--------------------------------
JS編碼:
var trmpStr = url+"?com=exportData"
+ "&dataAlias="+dataAlias
+ "&orgDm="+cboZz.getCode()
+ "&ksrq="+obj.ksrq
+ "&jzrq="+obj.jzrq
+ "&name="+encodeURIComponent(encodeURIComponent(txtMcInfo))
+ "&personCode="+personCode
+ "&queryStr="+encodeURIComponent(encodeURIComponent(queryStr));
JAVA解碼:
String dataAlias = request.getParameter("dataAlias");//數據來源別名
String orgDm = request.getParameter("orgDm");//機構代碼
String ksrq = request.getParameter("ksrq");//開始日期
String jzrq = request.getParameter("jzrq");//截止日期
String name = java.net.URLDecoder.decode(request.getParameter("name"),"UTF-8");//名稱檢索條件
Long personCode = null;//組員id
try{ personCode = Long.parseLong(request.getParameter("personCode"));}catch(Exception e){}
String queryStr = java.net.URLDecoder.decode(request.getParameter("queryStr"),"UTF-8");//名稱檢索條件