在使用get提交,url傳遞參數的時候,會帶來中文亂碼的問題,對此可以使用js編碼來解決。
Js編碼的幾種方式區別:
1.window.escape()與HttpUtility.UrlEncodeUnicode()編碼格式一樣:將一個漢字編碼爲%uxxxx格式
不會被window.escape編碼的字符有:@ _ - . * / + 這與http://www.w3school.com.cn/js/jsref_escape.asp上的解釋不符合
2.window.encodeURIComponent()與HttpUtility.UrlEncode()編碼格式一樣:將一個漢字編碼爲%xx%xx%xx的格式
不會被window.encodeURIComponent編碼的字符有:' ( ) * - . _ ! ~ 這與http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp解釋相符合
不會被HttpUtility.UrlEncode編碼的字符有:' ( ) * - . _ ! 相比較而言,HttpUtility.UrlEncode比window.encodeURIComponent多一個 ~ 編碼
3.不會被window.encodeURI編碼的字符有: - _ . ! * ( ) ; / ? : @ & = $ , #,與encodeURIComponent對比,發現encodeURI不對:;/?:@&=+$,#這些用於分隔 URI 組件的標點符號進行編碼
後臺java解碼:
name = java.net.URLDecoder.decode(name,"UTF-8");//需處理異常
正常的操作下來發現還是有亂碼問題!
因爲在對後臺java程序裏的searchtext賦值的時候,本身已經使用了一次解碼,不過解碼的結果依然不對.
解決辦法:可以在頁面上進行兩次編碼操作,這樣後臺自動的那次就可以抵消掉一次,然後在使用
name = java.net.URLDecoder.decode(name,"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");