使用該方法首次遇到該錯誤:java
jquery form表單.serialize()序列化後中文亂碼問題緣由解決jquery
緣由:數組
.serialize()自動調用了encodeURIComponent方法將數據編碼了
瀏覽器
解決方法:服務器
調用decodeURIComponent(XXX,true);將數據解碼 ide
例如:
函數
var params = jQuery("#formId").serialize(); // http request parameters. params = decodeURIComponent(params,true);
再進行編碼:編碼
params = encodeURI(encodeURI(params));
後臺處理辦法:spa
String paramsTrans = new String(params.getBytes("ISO-8859-1"),"UTF-8"); params = java.net.URLDecoder.decode(paramsTrans , "UTF-8");
問題解決。.net
注意事宜:
頁面端發出的數據做兩次encodeURI,這個作的好處在於,無論瀏覽器用戶在頁面來設置編碼,服務器所採用的編碼來作一次URLencode轉換成UTF-8.encodeURL函數主要是來對URI來作轉碼,它默認是採用的UTF-8的編碼.
其中具體的原理分析以下,假設頁面端輸入的中文是一個「中」,按照下面步驟進行解碼 :
1.第一次encodeURI,按照utf-8方式獲取字節數組變成[-28,-72-83],對字節碼數組進行遍歷,把每一個字節轉化成對應的16進制數,這樣就變成了[E4,B8,AD],最後變成[%E4,%B8,%AD]
2.第二次encodeURI,把數組最後變成[%25E4,%25B8,%25AD]而後就把處理後的數據[%25E4,%25B8,%25AD]
發往服務器端,當應用服務器調用getParameter方法,getParameter方法會去向應用服務器請求參數 應用服務器最初得到的就是發送來的[%25E4,%25B8,%25AD],應用服務器會對這個數據進行URLdecode操做,
URldecode操做和encodeURL操做是相反的操做,處理結果就是[%E4,%B8,%AD],並把這個值返回
給getParameter方法 而後再在服務器端中調用相應的URL轉碼方法或者是函數 就能夠把數據還原成最初頁面發送過來的中文「中」了。