AJAX中文亂碼的幾種背景解決方案

來源:互聯網
上載者:User
1、使用POST方式傳參
 sPara += sName + "=" + encodeURI(encodeURI(sValue)) + "&"; xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open( "POST" , sURL , true ); xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlHttp.send(sPara);


注意,這裡我使用了兩次encodeURI,encodeURI(encodeURI(sValue))

String providerName = request.getParameter("providerName"); //post 傳遞的時候,一定是用utf8編碼的providerName = URLDecoder.decode(providerName , "utf-8");

分析:當調用request.getParameter()函數時,會自動進行一次URI的解碼過程,調用時內建的解碼過程會導致亂碼出現。而URI 編碼兩次後,request.getParameter()函數得到的是原資訊URI編碼一次的內容。再用可控的解碼函數 java.net.URLDecoder.decode()就可解出原始的正確的資訊。

2、使用GET方式傳參
GET方式要比POST方法好轉碼,但是它有字元限制
有兩種方式
一、在後台添加unescape方法進行解碼
前台使用javascript的escape方法進行轉碼

public static String unescape (String src){    StringBuffer tmp = new StringBuffer();    tmp.ensureCapacity(src.length());    int lastPos=0,pos=0;    char ch;    while (lastPos<src.length())    {     pos = src.indexOf("%",lastPos);     if (pos == lastPos)     {      if (src.charAt(pos+1)=='u')      {       ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);       tmp.append(ch);       lastPos = pos+6;       }      else      {       ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);       tmp.append(ch);       lastPos = pos+3;       }      }     else     {      if (pos == -1)      {       tmp.append(src.substring(lastPos));       lastPos=src.length();       }      else      {       tmp.append(src.substring(lastPos,pos));       lastPos=pos;       }      }    }    return tmp.toString(); }

二、直接使用encodeURI進行轉碼
前台直接使用encodeURI進行轉碼
在後台使用request.getParameter("name");就可以得到未經處理資料。
原因可能是,當調用request.getParameter()函數時,程會自動進行一次URI的解碼過

這幾種方式都主要用於,前台向後台傳資料,後台向前台轉資料沒有描述


註:文章主要用於自己的經驗積累,所以沒有寫的太細,如有人來看,看不懂也不要罵我啊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.