`
01404421
  • 浏览: 228659 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

查询分页中汉字参数传递的编码问题解决方案

阅读更多

首先,感谢我昨天的提问http://www.iteye.com/problems/27665有那么多热心的同志回答!是他们提供的资料帮我解决了这个问题。一下开始我的正文:

昨天要做一个查询分页,因为以前没有做过中文的查询,这次确实费了一番功夫才解决,一下记录整个过程希望能帮助和我遇到同样问题的朋友们。

我的需求是如下图所示的一个酒店搜索:



项目中使用的是Spring的org.springframework.web.filter.CharacterEncodingFilter做的字符过滤器,页面和数据库都使用的是utf-8的编码,tomcat默认编码是iso-8859-1没有改动。

第一步:当这个查询的表单提交的时候Action 中第一次查询,JSP页面显示数据列表和分页,一切正常,分页的按钮链接中包含了查询条件,当然包含了汉字。但是点下一页的时候Action中读到的参数就是乱码了。这是大家都能做到的一步,往下可能很多入门者就会搞乱了。

第二步:

大家都知道Tomcat默认是不支持汉字uri的,所以我们要把传到页面的uri进行处理,网上很多介绍的,就是使用JS来处理,这里涉及到JS三个方法的escape、encodeURI、encodeURIComponent,务必理解这三个方法,这个地方有介绍:http://blog.csdn.net/sfdev/archive/2009/01/20/3842857.aspx,我用到的是encodeURI。

我处理分页链接中的汉字方法如下:

1.把分页的页面、上下页这些链接包含在一个div中

 

<div id="pageDivShow">
	<jsp:include page="/manage/util/pagination.jsp"><%--一些参数传递--%></jsp:include>
  </div>

 

 2.使用Js修改这个div中的uri,我使用的是Jquery来做的,代码如下:

 

$(document).ready(function(){
			
			$("#pageDivShow a").each(
				function(){
					var h=$(this).attr("href");
					$(this).attr({href:encodeURI(h)});
				}
			);
			
		});

 

 到此页面部分工作告一段落,我看资料里介绍JS的encodeURI方法是默认转换为utf-8,它也没有传入编码的方法。

第三步:

在Action中获取第一次Form提交的数据时可以直接获得正确的汉字,但是从分页上提交到Action中的数据要做另外一步的处理:

 

new String(value.getBytes("iso-8859-1"),"utf-8");

 

 通过这个方法就可以正确的获得分页传回的汉字参数了。

这里就又产生了一个新的问题,就是我们要区分提交给Action的请求来源是Form提交的,还是分页中提交的,这样就简单了,用一个变量就可以解决。

到此结束,很简单吧,如果还不能理解就照着做个demo,有问题欢迎交流!

再次感谢昨天热心回答我提问的同志们!

  • 大小: 36.6 KB
0
0
分享到:
评论
5 楼 snowolf 2009-10-24  
01404421 写道
snowolf 写道
snowolf 写道
跳出你的字符集编码转换,用Base64编码吧!

参考使用Url Base64编码,这是最常用的方式!

多谢啊,以前还没有接触过Based64,刚才看了一下,还不是很了解,如果能给一些资料就更感激了!

我博客里有http://snowolf.iteye.com/blog/379860你可以先了解一下,具体的url base64实现可以看commmons codec 的1.4版本实现! 使用起来很简单!!!
4 楼 01404421 2009-10-24  
snowolf 写道
snowolf 写道
跳出你的字符集编码转换,用Base64编码吧!

参考使用Url Base64编码,这是最常用的方式!

多谢啊,以前还没有接触过Based64,刚才看了一下,还不是很了解,如果能给一些资料就更感激了!
3 楼 snowolf 2009-10-24  
snowolf 写道
跳出你的字符集编码转换,用Base64编码吧!

参考使用Url Base64编码,这是最常用的方式!
2 楼 snowolf 2009-10-24  
跳出你的字符集编码转换,用Base64编码吧!
1 楼 01404421 2009-10-24  
刚在百度搜索结果的代码里导入的JS文件中发现这样一句代码:
C.src = "http://suggestion.baidu.com/su?wd=" + encodeURIComponent(S) + "&p=" + R + "&t=" + (new Date()).getTime();

原来百度也是使用JS来解决编码问题的,用的是encodeURIComponent这个方法,查了一下JS的三个方法的区别:
escape() 方法:采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +

encodeURI() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

encodeURIComponent() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )

因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

相关推荐

    jsp资料基础知识分页和乱码处理

    本资源包“jsp资料基础知识分页和乱码处理”着重介绍了JSP的基础知识,以及在实际应用中常见的分页技术和乱码处理方法。 首先,让我们深入了解一下JSP的基础知识。JSP的核心在于它将业务逻辑和页面展示进行了分离,...

    html2pdf支持图片及中文

    在HTML2PDF与TCPDF的结合使用中,我们可以利用TCPDF的强大功能来解决中文显示问题。具体步骤如下: 1. **安装和配置HTML2PDF**:首先,你需要安装HTML2PDF库。这可以通过Composer(PHP的依赖管理工具)来完成,或者...

    企业宣传网站项目中遇到的问题及知识点

    以下是一些关键的知识点和问题的解决方案: 1. **商品列表的实现**: 在这个示例中,商品列表的展示通过 JSP (JavaServer Pages) 实现。`&lt;table&gt;` 标签用于创建表格布局,`&lt;%@ include %&gt;` 语句用于包含其他 JSP ...

    Java面试框架高频问题2019

    **问题八:如何解决POST请求中文乱码问题,GET的又如何处理呢?** - POST请求可以通过配置过滤器解决。 - GET请求需要在客户端编码为UTF-8。 **问题九:SpringMVC的异常处理?** - 使用`@ControllerAdvice`和`@...

    SmartClient资料

    26. **JS传递中文参数乱码**:当JavaScript传递包含中文字符的参数时,可能会出现乱码问题,解决方法通常涉及到字符编码转换。 这些知识点涵盖了SmartClient的核心组件、数据管理、用户交互、前后端通信等多个方面...

    php+ajax实现无刷新数据分页的办法

    在index.php文件中,首先通过PHP的header函数设置内容的编码格式为GBK,避免中文乱码。然后在HTML的部分引入JavaScript和CSS文件。在部分,显示数据内容的div容器和分页导航条的div容器。 在PHP脚本部分,首先获取...

    ASP.NET常见问题集锦.zip

    .net中中文乱码问题解决.txt ADO.NET 与 XML:双剑合壁,威力强大.doc ASP.NET HTTP 运行时.doc ASP.NET ViewState 初探.doc ASP.NET Web 方法中的 XmlElement 参数的功能.d ASP.NET 中 Cookie 的基本知识....

    ireport入门指南+饼状图+柱状图.pdf

    5. 中文字体乱码和PDF中无法正常显示的问题:这部分内容应该涉及在使用iReport时可能遇到的关于中文字体显示问题的解决方法。 6. 报表分栏显示:涉及到如何设置报表使其具有分栏效果。 7. 去掉记录中的null:这...

    项目小结.doc

    解决方法是将页面编码从UTF-8改为GBK,但这会导致编码不统一。作者了解到common-fileUpload能更好地处理中文乱码。 7. **前后端交互**: - 在后台设置的属性要传递到前端显示,通过隐藏字段(hidden input)作为...

    DocumentRenderer

    `DocumentRenderer`会调用`PrinterJob.print()`方法,传递必要的参数,如页面格式、打印范围等。 5. **预览和设置**:在实际打印前,用户可能需要预览页面布局。`DocumentRenderer`可能包含预览功能,允许用户调整...

    ireport快速入门指南.pdf

    文档列举了一些常见的报表问题以及它们的解决方案,例如中文字体乱码、PDF中无法显示、报表分栏、空值处理、背景颜色交替、格式化输出、柱状图方向、报表参数传递、不同文件格式导出、Web应用中图片显示问题、报表在...

    JSP初学心得

    - **字符编码转换**:在处理中文等非英文字符时,经常会出现乱码问题。为了解决这个问题,可以采用特定的编码格式进行转换。例如,将字符串从ISO-8859-1编码转换为UTF-8编码: ```java String title = ""; byte[]...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例102 解析URL地址中传递的编码参数 134 实例103 转义帖子中的特殊字符 135 实例104 获取任意字符的ASCII码 136 实例105 查找指定ASCII码对应的字符 136 实例106 合理定义上传文件的名称 137 实例107 通过异或方式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例102 解析URL地址中传递的编码参数 134 实例103 转义帖子中的特殊字符 135 实例104 获取任意字符的ASCII码 136 实例105 查找指定ASCII码对应的字符 136 实例106 合理定义上传文件的名称 137 实例107 通过异或方式...

    jsp+servlet实现增删改查

    为了解决中文乱码问题,项目可能使用了过滤器(Filter)。在HTTP请求和响应过程中,过滤器可以拦截并处理字符编码,确保中文字符正确显示。例如,设置请求和响应的编码格式为UTF-8,避免中文乱码的出现。 分页功能...

    DatabaseHelper_oracle_c#Oracle_C#_ManagedDataAccess_oracle操作_

    本项目"DatabaseHelper_oracle_c#Oracle_C#_ManagedDataAccess_oracle操作_"正是基于这个库实现的,旨在提供一套完整的解决方案,用于执行基本的数据库操作,如增、删、改、查以及调用存储过程。 首先,我们来看...

    JSP教程——必看.pdf

    - **3.1.2 处理汉字信息**:解决中文乱码问题,通常需要设置正确的编码。 - **3.1.3 常用方法举例**:例如使用`getHeader()`获取HTTP头部信息。 - **3.1.4 用户注册**:通过`request`对象收集用户的注册信息。 -...

Global site tag (gtag.js) - Google Analytics