问题的产生:
做了这样一个功能,记录所访问过的历史网址,然后放入一个栈中,以便查看历史能顺利返回到曾经访问过的历史页面,由于将所有的参数也一起放在栈中构造了一个带参的URL,所以对于一些参数中存在中文的URL,就不可避免的遇到了中文参数以GET方式提交的情况。
开发环境是:Tomcat 5.x
生产环境是:Websphere 6.1
在web.xml中加入了非常通用的encodingfilter。但是在tomcat中发现这个filter没有发挥其应该发挥的作用,即参数出现中文时,会乱码。但是奇怪的是在websphere中未发现这样的情况,于是,开始搜索网上解决方案。虽然在tomcat中要解决这样的问题很简单,只需要在server.xml中修改Connector:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" [color=red]URIEncoding="GBK" [/color] />
就能解决,但是问题的原因究竟在哪里,websphere是否需要同样的配置,或者是否已经有类似的配置了?这些问题必须搞清楚,不然很难控制。
问题的原因:
首先说说tomcat产生这个问题的原因,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而,在 tomcat5 中,get 与 post 的却进行了不同的处理,对于post方法,采用了和tomcat4的编码处理方法,通过request.setCharacterEncoding进行编码处理,而get方法将通过URI提交处理,tomcat会查找server.xml文件中Connector 元素中的参数URIEncoding的值进行对URI进行encoding,如果没有这个值,将用iso8859-1进行encoding,这样所产生了一个
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
无法同时解决post和get的提交编码。这样一来就说明产生问题的原因并不是encoding的问题,而是tomcat处理的问题,而websphere没有出现这样的问题,可以认为websphere对于post和get方法是一致的,统一通过filter来。
问题解决方案2:
对于tomcat处理这个问题的方法并不是单一的。tomcat的connector元素中另外提供了useBodyEncodingForURI参数,其值为boolean型,true代表使用处理body的encoding方法(即request.setCharacterEncoding)来处理URI的编码,这样就可以用一个过滤器来同时处理post和get方法了。
题外话:
中国的程序员始终是很辛苦的,要不断在编码问题上博弈。希望将来会。。。
分享到:
相关推荐
jsp使用URL编码传递中文参数问题.doc 介绍了如何在JSP编写动态网页程序中将字符进行转换
jspSmartUpload.jar, 这个经本人测试修改,已可真正解决中文乱码问题,包括中文参数和含中文路径及中文文件名乱码问题。
主要解决在ajax中中文参数传递过程中,服务器接收到中文乱码的问题
在使用myeclipse过程中,我使用ajax同步请求传递参数到后台却出现中文乱码,这是我解决问题的代码,希望对您有所帮助
从A页面通过url传参到B页面时,获取URL中参数出现中文乱码问题,解析url参数的正确方法如下,感兴趣的朋友可以参考下
C++Http上传文件到web服务器,解决中文参数乱码问题,微软提供的Chttpconnect 类在请求http头参数是中文时出现乱码
java代码-使用java解决中文参数乱码问题的源代码 ——学习参考资料:仅用于个人学习使用!
1.传递参数: 代码如下: var pmt = ‘sensor=’+ encodeURI(encodeURI(sensor))+’&device=’+encodeURI(encodeURI(device))+’&instrument=’; pmt += encodeURI(encodeURI(instrument))+’&n=’+n+’&addDate=’+...
springboot打包成war,放到外部tomcat中,post请求参数中文乱码,以及tomcat控制台中文乱码问题
C++post请求的时候中文参数,导致传到服务器乱码,这种异常的处理。也就是如何解决POST中文参数 解释可以参考https://blog.csdn.net/gemo/article/details/8468311 这里提供成功代码
AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题
jsp使用URL编码传递中文参数乱码问题
主要是修改两个问题:一个问题是请求接口中文乱码的问题 第二个问题是,有时候,对方接口参数比较奇怪,而我们的request类的属性又不能用那种名字,就需要指定别名。比如当当的开放平台 出版物类 的添加,某个参数的...
浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。 原来urlencode这个函数有2中编码方式,一种是gbk格式的编码,一种...
asp.net页面通过URL参数传值中文乱码问题解决办法
遇到类似的中文参数就转啊转的,感觉世界不那么美好了!这还不累死人啊,一会GET转,一会POST转,痛苦! 超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题
2021年THINKPHP关于IIS上面中文参数乱码问题电脑资料.pdf
网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到的是乱码问题的解决 网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到...
在js中对中文进行编码在java程序中进行解码即可解决中文乱码问题
PHP 伪静态 网址参数中的【中文正则表达式】问题.rar