`
jessdy
  • 浏览: 61289 次
  • 性别: Icon_minigender_1
  • 来自: 上海虹口区
社区版块
存档分类
最新评论

中文参数问题

    博客分类:
  • JSP
阅读更多
问题的产生:
做了这样一个功能,记录所访问过的历史网址,然后放入一个栈中,以便查看历史能顺利返回到曾经访问过的历史页面,由于将所有的参数也一起放在栈中构造了一个带参的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方法了。

题外话:
中国的程序员始终是很辛苦的,要不断在编码问题上博弈。希望将来会。。。
分享到:
评论
5 楼 kxhu 2009-03-23  
谢 谢 !
4 楼 yisonghui 2008-05-06  
问下LZ,如果不想通过配置,想要在Action中处理这样的问题,并且框架类似于SPRING,在Action中没有request对象,这时该怎么处理呢?
3 楼 yisonghui 2008-05-06  
问下LZ,如果不想通过配置,想要在Action中处理这样的问题,并且框架类似于SPRING,在Action中没有request对象,这时该怎么处理呢?
2 楼 xuxiaolei 2008-04-29  
感谢楼主,我也一直被这个问题困扰,今天终于找到正确答案了。
1 楼 绝对可能 2008-04-29  
又长学问了。

相关推荐

    jsp使用URL编码传递中文参数问题.doc

    在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...

    使用ajax可以传中文参数

    #### Ajax中文参数问题概述 在使用Ajax进行数据传输时,如果请求中包含了中文字符,由于编码方式的不同,这些中文字符在服务器端解析时可能会出现乱码现象。这主要是因为客户端(浏览器)与服务器端之间对于字符集...

    jspSmartUpload.jar真正解决中文文件和中文参数乱码问题

    jspSmartUpload.jar, 这个经本人测试修改,已可真正解决中文乱码问题,包括中文参数和含中文路径及中文文件名乱码问题。

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    ajax中文参数乱码问题解决方法

    主要解决在ajax中中文参数传递过程中,服务器接收到中文乱码的问题

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    2. **中文参数问题**: 当JSP页面中的表单提交含有中文字符的数据时,GET请求将这些数据附加到URL后面,而POST请求则将数据放在请求体中。浏览器和服务器之间可能存在不同的字符编码标准,如UTF-8、GBK等,如果不...

    jquery获取URL中参数解决中文乱码问题的两种方法

    当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...

    MP常见问题解决及全部参数表

    "MP常见问题解决及全部参数表" MP常见问题解决及全部参数表是指在MP飞行控制系统中,为了解决一些常见的问题和调整参数设置,以确保飞行器的稳定运行和安全飞行。 ACRO_LOCKING ACRO_LOCKING是一个姿态锁定参数,...

    java代码-使用java解决中文参数乱码问题的源代码

    java代码-使用java解决中文参数乱码问题的源代码 ——学习参考资料:仅用于个人学习使用!

    asp.net中URL参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    C++Http上传文件到web服务器,解决中文参数乱码

    在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...

    jmeter5.0 解决请求参数中文乱码ApacheJMeter_http.jar

    在这个场景下,我们关注的是如何解决在使用JMeter 5.0版本时遇到的请求参数中文乱码问题。 首先,中文乱码问题通常是由于字符编码不一致导致的。在HTTP请求中,如果服务器和客户端对字符编码的理解不同,就可能导致...

    Web报表FineReport页面如何传递中文参数

    在参数值、参数名称以及报表名称中,如果包含中文字符或特殊字符,直接传递可能会导致乱码或错误问题。因此,需要对这些中文或特殊字符进行编码转换。 为了解决这个问题,FineReport提供了一个内部封装的编码方法,...

    ajax传递中文参数乱码解决办法

    通过以上方法,我们可以有效地解决AJAX传递中文参数时可能出现的乱码问题。关键是在发送端进行编码,在接收端进行相应的解码处理。同时,保持前后端以及数据库字符集的一致性也是很重要的。掌握了这些技巧后,开发者...

    asp.net页面通过URL参数传值中文乱码问题解决办法

    在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...

    Delphi10中idHttpServer接收中文参数乱码的处理

    但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但...

    POST中文参数乱码问题解决.txt

    C++post请求的时候中文参数,导致传到服务器乱码,这种异常的处理。也就是如何解决POST中文参数 解释可以参考https://blog.csdn.net/gemo/article/details/8468311 这里提供成功代码

    orcale中文参数

    - 在处理中文参数时,可能会遇到如乱码、截断等问题,需要通过查看数据库日志、跟踪文件,调整NLS_LENGTH_SEMANTICS等参数进行调试。 综上所述,Oracle中文参数的配置涉及到多个层面,包括数据库创建、客户端设置...

    丹佛斯FC51中文参数指南.rar

    《丹佛斯FC51中文参数指南》是一个针对丹佛斯FC51变频器的详细操作手册,旨在帮助用户理解和设置该设备的各种参数。丹佛斯FC51是一款广泛应用在工业自动化领域的变频器,它能有效地控制电机的速度和扭矩,以适应不同...

    解决了浏览器URL地址栏直接输入get参数值包含中文时的urlencode编码格式问题

    浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。 原来urlencode这个函数有2中编码方式,一种是gbk格式的编码,一种...

Global site tag (gtag.js) - Google Analytics