頁面編碼爲GBK時 jquery 提交ajax數據完美解決"中文亂碼"方案

jquery在發送ajax數據時,使用了js的內置方法encodeURIComponent對數據進行了處理,該方法的作用是把數據以UTF-8的方式編碼,所以頁面的編碼方式無論是GBK、UTF-8等,在服務器端獲取數據前使用request.setCharacterEncoding("UTF-8"),就可以獲取到正常的中文字符了;但是,在實際項目中這個簡單的方案並不能解決所有情況。

我們做如下處理:
1.在使用jquery的 jQuery.ajax() 方法時,在參數中增加一個設置{contentType : "application/x-www-form-urlencoded; charset=utf-8"},這時在服務器端使用方法request.getCharacterEncoding()(PS:這時以java代碼爲例)就可以獲取到編碼格式爲UTF-8,所以不需要進行任何處理就可以獲取到正常的中文字符。
2.以POST方式提交表單時,request.getCharacterEncoding()獲取到的編碼格式爲null,這時就要根據項目的編碼方式進行解碼了。

還可以把這部分代碼寫在過濾器中:
package com.lianzt.filter;
public class EncodingFilter implements Filter {
    private String encoding = null;
    public EncodingFilter() {
    }
    public String getEncoding() {
        return encoding;
    }
    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        if (request.getCharacterEncoding() == null) {
            request.setCharacterEncoding(encoding);
        }
        response.setContentType("text/html;charset=" + encoding);
        chain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
    }
}
在web.xml中加上以下代碼:
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>com.lianzt.filter.EncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>gbk</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
這樣在servlet就可以獲取到正常的表單數據了,前提是在調用jQuery.ajax()時,要加上{contentType : "application/x-www-form-urlencoded; charset=utf-8"}參數,可以把這個參數使用jQuery.ajaxSetup()方法設置爲全局ajax參數,不需要每次ajax請求都加上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章