1. 程式人生 > >關於get方式提交中文亂碼問題的解決方式

關於get方式提交中文亂碼問題的解決方式

get方式提交中文亂碼

解決方法可以考慮從以下兩個方面中的任意一個從手。

1.1、伺服器原因(tomcat)

  1. 瀏覽器傳送時文字編碼是和頁面編碼保持一致。
  2. tomcat中接收請求沒有設定編碼的情況下,預設使用ISO-8859-1編碼。
  3. 頁面編碼使用UTF-8,get方式自然使用UTF-8編碼,但伺服器接收沒有指定編碼格式,預設使用ISO-8859-1,傳參帶中文時自然亂碼。

解決方案:

  1. ISO-8859-1編碼是單位元組編碼,可以採用如下方法將其轉為UTF-8編碼的中文。
    String xx = new String(request.getParameter(“key”).getBytes(“ISO-8859-1”), “UTF-8”);`

  2. tomcat的話可以在 server.xml 檔案裡指定編碼格式為UTF-8。
    標籤名:Connector 新增: URIEncoding=”UTF-8”

<Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

1.2、前臺頁面編碼,後臺解碼

如果不想在伺服器上指定編碼格式,那麼可以在頁面get提交時對中文進行url轉碼,後臺進行解碼即可。

前臺頁面:
var str=encodeURI(encodeURI(“這裡是要加密的含有中文的字串”));

為什麼這裡要加密兩次呢?答案是因為第一次加密,生成了含有%開頭的字串,但是在瀏覽器裡面%是一個轉義字元,在瀏覽器提交到伺服器時會將這一串加密後的字串%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面,所以加密一次不夠,加密兩次以後後臺拿到的才是正確加密過的字串,才能進行解碼的操作!

後臺頁面:
String result= URLDecoder.decode(request.getParameter(“取到的加密字串”), “utf-8”);