Ajax的Post提交資料程式接受中文亂碼解決辦法

來源:互聯網
上載者:User

Ajax以POST方式提交,url形式為”url?param=xx&param2=xx”時,如果傳遞的參數是中文或日文,後台接收參數將出現亂碼,疑似“灝?浼??ㄨ??rdquo;。此時我們需要將url編碼成UTF-8。調用javascript方法encodeURI(URIstring),後台接收參數調用URLDecoder.decode(String s,String enc) 解碼。
工作中遇到這個問題,起初打算用反射迴圈給屬性轉碼,考慮到反射效率問題,為避免濫用反射。於是想到BeanUtils工具包賦值前能不能自訂動作呢?還真行。下面給出工作中遇到的執行個體,頁面通過jQuery序列化所有表單使之成為url參數形式字串,通過Ajax提交。後台Struts封裝的FormBean取得所有參數值,調用BeanUtils工具包copyProperties(Object dest, Object orig)方法將FormBean複製到ValueBean,在複製對象屬性之前,自訂String編碼轉換器,轉換器中通過URLDecoder.decode(String s,String enc)對Value進行轉碼。對象的所有屬性將會通過自訂轉換器過濾轉碼成中文。

解決此問題的方法非常簡單,只需要在JS處理參數時用escape()函數處理一下即可,而且不需要再用unescape()解碼,這個方法適合POST和GET方式,具體的Ajax代碼這裡我不例出,這裡給出用escape()函數處理參數時的代碼:
 

 代碼如下 複製代碼
var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content); 

通常我們在處理Ajax的時候會在這裡直接擷取參數的值,為了使中文參數不是亂碼,我們只需要用escape()函數對參數處理下即可。

問題二

當網站頁面不是utf-8編碼時,ajax提交的中文便會變成亂碼,解決方案如下:

找到jquery.js裡的

 代碼如下 複製代碼

 
contentType:application/x-www-form-urlencoded

將它改成

 
contentType:application/x-www-form-urlencoded; charset=UTF-8

就可以了。原因:未指定charset時,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元。jquery的ajax根本沒有考慮到國際化的問題,而使用了歐洲的字元集,所以傳遞中文時才會出現亂碼。

例子

js的ajax

 代碼如下 複製代碼

if(confirm("確定儲存嗎?")){
 var url = "xxAction.do?method=xxMethod";
 var data = $("form:first").serialize();
 data = encodeURI(data); // 提交資料URL通過encodeURI(URIstring)編碼
 $.ajax({
  type:"POST",
  url:url,
  data:data,
  success:function(msg){
   alert(msg);
  }
 });
}

背景程式

 代碼如下 複製代碼

private void formBeanToValueBean(ZmxgzzmsyVB vb, ZmxgzzmsyFB fb)
  throws Exception {
 // 自訂轉換String編碼轉換器
 ConvertUtils.register(new Converter() {
  public Object convert(Class type, Object value) {
   if (value == null) {
    return null;
   } else {
    String val = "";
    try {
     // 通過URLDecoder.decode(String s,String enc)解碼
     val = URLDecoder.decode(value.toString(), "UTF-8");
    } catch (Exception e) {
     e.printStackTrace();
    }
    return val;
   }
  }
 }, String.class);
 BeanUtils.copyProperties(vb, fb);
 ConvertUtils.deregister();
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.