js之URL中文傳參亂碼問題處理

在使用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");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章