页面编码为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,这时就要根据项目的编码方式进行解码了。
还可以把这部分代码写在过滤器中:
packagecom.lianzt.filter;
publicclassEncodingFilterimplementsFilter{
privateStringencoding=null;
publicEncodingFilter(){
}
publicStringgetEncoding(){
returnencoding;
}
publicvoidsetEncoding(Stringencoding){
this.encoding=encoding;
}
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)
throwsIOException,ServletException{
if(request.getCharacterEncoding()==null){
request.setCharacterEncoding(encoding);
}
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request,response);
}
publicvoidinit(FilterConfigfilterConfig){
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请求都加上。
相关推荐
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo