extjs 表单设置html5,extjs或html表单提交中文时乱码问题

extjs表单提交中文时乱码问题,其他表单提交数据时乱码问题都可以参考

今天用extjs form post提交表单到服务器,是乱码,tomcat设置了,页面和服务器都是utf-8;request也设置编码了,实在搞不懂,后来查看了好久发现header是application/x-www-form-urlencoded,我改成了Content-type: application/x-www-form-urlencoded;charset=UTF-8

就可以了,下面详细来说说

如果数据是中文,服务器接收的是乱码,然后看了很多乱码的文章,最后解决了,现在总结下.

1.首先搞清楚客户端是用那种编码方式将数据编码后提交的.

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded;charset=UTF-8

这样服务器端就可以知道form里的字符是怎么编码的了。要注意的是这里的charset=UTF-8是默认的,如果这个HTML代码里有,那么此HTML的form表单将以GBK的编码方式提交数据,其实表单提交数据使用的编码方式是可以指定的.那现在用HttpClient,根本就没有浏览器和具体的HTML代码,其实HttpClient的PostMethod对象里已经有设定编码方式的方法

PostMethod post = new PostMethod("http://iteye.com");

post.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=UTF-8");

这里的编码方式可以随意指定,开始就是因为没有写这段,采用了Httpclient默认的编码方式,所以出现乱码,这里设置编码方式的方法也不唯一.ajax使用post方法提交数据的编码方式的设定也和这个类似.

2.服务器端是如何选择那种编码方式来对数据进行解码的呢.

首先我用request.getCharacterEncoding()来看表单提交数据所使用的编码方法,奇怪的是用浏览器提交request.getCharacterEncoding()是null,而用HttpClient提交request.getCharacterEncoding()的值是UTF-8,和客户端指定的编码方式一致,后来google了下,原来是浏览器做的手脚,IE是不将表单提交数据使用的编码方式写到HTTP头部发送出去的.我发现如果用HttpClient的post提交数据,编码方式指定的话,request.getCharacterEncoding()是能得到值的,而且request对象也用此编码方式解码,不用request.setCharacterEncoding("")指定;如果request.getCharacterEncoding()是null,就要request.setCharacterEncoding("")指定编码方式,要和你提交时设定的编码方式一致.然后request.getParameter("")的值就是你想要的了.(这里有可能有误的地方请指出)

最后extjs中formpanel提交时乱码,在submit中设置header的方法是:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值