Jquery serialize傳中文亂碼解決方法

使用該方法首次遇到該錯誤: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轉碼方法或者是函數  就能夠把數據還原成最初頁面發送過來的中文「中」了。

相關文章
相關標籤/搜索