1. 程式人生 > >get請求中文亂碼問題解決和引數編碼

get請求中文亂碼問題解決和引數編碼

在web專案中,我們通常的請求方式都是get/post,但get方式有一個問題,就是引數是中文的時候容易亂碼,而且引數在路徑中可以看到,不安全,我的解決辦法是,對引數進行編碼,這樣可以解決如上兩個問題

  • 1、在js中使用 encodeURI(encodeURI(“引數”)), 預設是以utf-8的形式編碼;
    這裡為什麼使用兩次encodeURI(“xxx”)呢?
    可以看如下圖:
    1)沒使用之前:
    這裡寫圖片描述

2)使用一次encodeURI(“xxx”)
這裡寫圖片描述

3)使用兩次encodeURI(“xxx”)
這裡寫圖片描述
這樣最起碼在路徑中完全看不出資訊,安全。

兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上相當於首先進行了一 次UTF-8編碼(此時已經全部轉換為ASCII字元),再進行了一次iso-8859-1編碼,因為對英文字元來說UTF-8編碼和ISO- 8859-1編碼的效果相同。

  • 2、 在後臺只需要使用URLDecoder.decoder(“xxx”,”utf-8”)解碼即可得到引數;

在後臺接收引數時候,首先通過request.getParameter()自動進行第一次解碼(可能是 gb2312,gbk,utf-8,iso-8859-1等字符集,對結果無影響)得到ascii字元,然後再使用UTF-8進行第二次解碼,使用 Java.NET.URLDecoder(“”,”UTF-8”)方法。

兩次編碼兩次解碼的過程為:
UTF-8編碼->UTF-8(iso-8859-1)編碼->iso-8859-1解碼->UTF-8解碼,編碼和解碼的過程是對稱的,所以不會出現亂碼