问题的产生:
做了这样一个功能,记录所访问过的历史网址,然后放入一个栈中,以便查看历史能顺利返回到曾经访问过的历史页面,由于将所有的参数也一起放在栈中构造了一个带参的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编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...
#### Ajax中文参数问题概述 在使用Ajax进行数据传输时,如果请求中包含了中文字符,由于编码方式的不同,这些中文字符在服务器端解析时可能会出现乱码现象。这主要是因为客户端(浏览器)与服务器端之间对于字符集...
jspSmartUpload.jar, 这个经本人测试修改,已可真正解决中文乱码问题,包括中文参数和含中文路径及中文文件名乱码问题。
### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...
主要解决在ajax中中文参数传递过程中,服务器接收到中文乱码的问题
2. **中文参数问题**: 当JSP页面中的表单提交含有中文字符的数据时,GET请求将这些数据附加到URL后面,而POST请求则将数据放在请求体中。浏览器和服务器之间可能存在不同的字符编码标准,如UTF-8、GBK等,如果不...
当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...
"MP常见问题解决及全部参数表" MP常见问题解决及全部参数表是指在MP飞行控制系统中,为了解决一些常见的问题和调整参数设置,以确保飞行器的稳定运行和安全飞行。 ACRO_LOCKING ACRO_LOCKING是一个姿态锁定参数,...
java代码-使用java解决中文参数乱码问题的源代码 ——学习参考资料:仅用于个人学习使用!
在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...
在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...
在这个场景下,我们关注的是如何解决在使用JMeter 5.0版本时遇到的请求参数中文乱码问题。 首先,中文乱码问题通常是由于字符编码不一致导致的。在HTTP请求中,如果服务器和客户端对字符编码的理解不同,就可能导致...
在参数值、参数名称以及报表名称中,如果包含中文字符或特殊字符,直接传递可能会导致乱码或错误问题。因此,需要对这些中文或特殊字符进行编码转换。 为了解决这个问题,FineReport提供了一个内部封装的编码方法,...
通过以上方法,我们可以有效地解决AJAX传递中文参数时可能出现的乱码问题。关键是在发送端进行编码,在接收端进行相应的解码处理。同时,保持前后端以及数据库字符集的一致性也是很重要的。掌握了这些技巧后,开发者...
在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...
但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但...
C++post请求的时候中文参数,导致传到服务器乱码,这种异常的处理。也就是如何解决POST中文参数 解释可以参考https://blog.csdn.net/gemo/article/details/8468311 这里提供成功代码
- 在处理中文参数时,可能会遇到如乱码、截断等问题,需要通过查看数据库日志、跟踪文件,调整NLS_LENGTH_SEMANTICS等参数进行调试。 综上所述,Oracle中文参数的配置涉及到多个层面,包括数据库创建、客户端设置...
《丹佛斯FC51中文参数指南》是一个针对丹佛斯FC51变频器的详细操作手册,旨在帮助用户理解和设置该设备的各种参数。丹佛斯FC51是一款广泛应用在工业自动化领域的变频器,它能有效地控制电机的速度和扭矩,以适应不同...
浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。 原来urlencode这个函数有2中编码方式,一种是gbk格式的编码,一种...