<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tinguo002

     

    jquery form提交時(shí)中文亂碼

    jquery form提交時(shí)中文亂碼
      博客分類:
    • java
    在使用jsp開始時(shí),一不小心就會(huì)出現(xiàn)中文亂碼的情況。通常可以使用如下方法解決:
    第一種解決方法:
    從jsp到servlet統(tǒng)一使用utf-8編碼.全部使用utf-8編碼能省去很多麻煩,但一點(diǎn)不足是utf-8編碼對漢字是使用3-4個(gè)字節(jié),會(huì)加大網(wǎng)絡(luò)傳輸量。
    第二種方法:
    1.jsp頁面使用GBK
    2.使用servlet過濾器設(shè)置request.setCharacterEncoding("GBK");google一下就能找到很多怎么使用過濾器轉(zhuǎn)換編碼。
    以上兩種方法能解決大部分的亂碼問題,特別是第一種方法,能解決使用ajax提交時(shí)的中文亂碼問題。如果采用第二種方法,那么在使用ajax提交表單時(shí)仍然會(huì)有中文亂碼。這是因?yàn)閍jax方式提交時(shí)js使用的是utf-8的編碼,過濾器使用gbk進(jìn)行轉(zhuǎn)碼就不正確了,應(yīng)該使用utf-8進(jìn)行轉(zhuǎn)碼。要解決這個(gè)問題,網(wǎng)上也有很多個(gè)版本,其中一個(gè)是我曾經(jīng)采用的在客戶端使用encodeURI,然后再在服務(wù)器端進(jìn)行URLDecoder.decode,這種方案在偶爾處理一下中文是可行的,但是如果頁面有大量數(shù)據(jù)錄入,那么這種方案是不可行的。有沒有好的解決方法呢?在經(jīng)過新一輪的google之后,還是找到了方法。參考http://www.iteye.com/topic/157698?page=1。原理就是根據(jù)httpheader中的內(nèi)容來區(qū)分是ajax方式請求還是普通的請求。在jquery1.2.6中,ajaxSettings默認(rèn)設(shè)置contentType為"application/x-www-form-urlencoded",在ajax方法中設(shè)置xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");,我們只要在servlet中根據(jù)這兩個(gè)參數(shù)值來判斷是不是通過xmlhttprequest發(fā)起的請求。這里值得一提的是jquery在提交form時(shí)對參數(shù)進(jìn)行了encodeURIComponent調(diào)用,參見param方法
    Java代碼 復(fù)制代碼 收藏代碼
    1. jQuery.each( a, function(){ 
    2.                 s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) ); 
    3.             }); 

    所以傳給servlet的就是utf-8編碼了,那么我們在過濾器中就必須使用utf-8進(jìn)行轉(zhuǎn)碼。
    對其中的過濾器做了下修正,在IE下和chrome下,request.getContentType()的值為"application/x-www-form-urlencoded",但是在firefox下,這個(gè)值為"application/x-www-form-urlencoded; charset=UTF-8",不是很明白ff為什么會(huì)是這個(gè)值。
    filter代碼如下:
    Java代碼 復(fù)制代碼 收藏代碼
    1. package com.ajax.demo.action; 
    2.  
    3. import java.io.IOException; 
    4.  
    5. import javax.servlet.Filter; 
    6. import javax.servlet.FilterChain; 
    7. import javax.servlet.FilterConfig; 
    8. import javax.servlet.ServletException; 
    9. import javax.servlet.ServletRequest; 
    10. import javax.servlet.ServletResponse; 
    11. import javax.servlet.http.HttpServletRequest; 
    12. import javax.servlet.http.HttpServletResponse; 
    13.  
    14. public class AjaxPostFilter implements Filter { 
    15.  
    16.     private static final String IE_CONTENT_TYPE = "application/x-www-form-urlencoded"
    17.     private static final String FF_AJAX_CONTENT_TYPE = "application/x-www-form-urlencoded; charset=UTF-8"
    18.     private static final String XMLHTTP_REQUEST = "XMLHttpRequest"
    19.     private static final String AJAX_CHARACTER_ENCODING_UTF8 = "UTF-8"
    20.  
    21.     public void destroy() { 
    22.         // TODO Auto-generated method stub 
    23.  
    24.     } 
    25.  
    26.     public void doFilter(ServletRequest servletRequest, 
    27.             ServletResponse servletResponse, FilterChain filterChain) 
    28.             throws IOException, ServletException { 
    29.         HttpServletRequest request = (HttpServletRequest) servletRequest; 
    30.         HttpServletResponse response = (HttpServletResponse) servletResponse; 
    31.         String requestedWith = request.getHeader("x-requested-with"); 
    32.         String type = request.getContentType(); 
    33.         if (XMLHTTP_REQUEST.equals(requestedWith)&& (FF_AJAX_CONTENT_TYPE.equals(type) 
    34.                 ||IE_CONTENT_TYPE.equals(type))) { 
    35.             request.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8); 
    36.             response.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8); 
    37. //          request.getParameterMap(); 
    38.         } 
    39.         filterChain.doFilter(request, response); 
    40.  
    41.     } 
    42.  
    43.     public void init(FilterConfig arg0) throws ServletException { 
    44.         // TODO Auto-generated method stub 
    45.  
    46.     } 
    47.  


    web.xml配置,我用的是struts
    Java代碼 復(fù)制代碼 收藏代碼
    1. <filter> 
    2.         <filter-name>ajaxEncodeFilter</filter-name> 
    3.         <filter-class>com.ajax.demo.action.AjaxPostFilter</filter-class
    4.     </filter> 
    5.     <filter-mapping> 
    6.         <filter-name>ajaxEncodeFilter</filter-name> 
    7.         <url-pattern>*.do</url-pattern> 
    8.     </filter-mapping> 
    9.     <filter-mapping> 
    10.         <filter-name>ajaxEncodeFilter</filter-name> 
    11.         <url-pattern>*.jsp</url-pattern> 
    12.     </filter-mapping> 


    這個(gè)filter應(yīng)該在你的EncodeFilter之后,RoyMax說要在之前,我試了下是不行的。
    經(jīng)過這樣設(shè)置之后,jsp使用gbk采用ajax提交就不會(huì)存在中文亂碼了。

    在使用chrome進(jìn)行測試時(shí),還發(fā)現(xiàn)chrome的一個(gè)奇怪問題,對于返回的結(jié)果,使用jquery.ajax處理
    Java代碼 復(fù)制代碼 收藏代碼
    1. success:function showResponse(responseText, statusText)  {  
    2. //這里name為input text id,如果"aa"在前,那么name的值會(huì)改為aa+返回的結(jié)果 
    3.                     $('#name').val("aa"+responseText); 
    4. //如果改成$('#name').val(responseText+"aa"),那么name的值仍然是//responseText,“aa”沒有加到后面去,不知道是什么原因 



    歡迎大家訪問我的個(gè)人網(wǎng)站 萌萌的IT人

    posted on 2013-03-29 08:16 一堣而安 閱讀(251) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品lv| 红杏亚洲影院一区二区三区 | 久久影院亚洲一区| 国产精品亚洲а∨天堂2021| 日本免费无遮挡吸乳视频电影| 中文字幕亚洲综合久久综合 | 日本成年免费网站| 亚洲无mate20pro麻豆| 最新中文字幕电影免费观看| 亚洲精品乱码久久久久久V| 亚洲电影日韩精品| 中文字幕永久免费| 亚洲综合激情九月婷婷| 啦啦啦高清视频在线观看免费| 亚洲国产精品精华液| 免费a级毛片视频| 麻豆精品不卡国产免费看| 亚洲综合激情九月婷婷| 日本特黄特色aa大片免费| 国产日韩精品无码区免费专区国产 | 亚洲精品mv在线观看| 成年大片免费视频| 人妻仑刮八A级毛片免费看| 亚洲线精品一区二区三区| 久久ww精品w免费人成| 亚洲精品乱码久久久久蜜桃| 久久亚洲色一区二区三区| 99久久国产免费中文无字幕| 亚洲乱妇老熟女爽到高潮的片| 亚洲精品国产自在久久| 日韩免费的视频在线观看香蕉| 亚洲av专区无码观看精品天堂| 国产性生交xxxxx免费| 97无码人妻福利免费公开在线视频| 亚洲小视频在线播放| 四虎影永久在线高清免费| 午夜爽爽爽男女免费观看影院| 亚洲精品欧美综合四区| 久久久久久久综合日本亚洲| 97无码免费人妻超级碰碰碰碰| 精品97国产免费人成视频|