超链接传递中文出现乱码问题

今天在用超链接传值时,遇到了传递中文到Action中出现乱码的问题。经过在网上查找,找到了原因和一些解决办法:

一、出现问题的原因:超连接传递值的基本方法是get方法  tomcat提供的默认编码方式-默认编码 :ISO-8859-1),在 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,这样所产生了一个无法同时解决post和get的提交编码。这样一来就说明产生问题的原因并不是encoding的问题,而是tomcat处理的问题。

二、解决的办法:

1、修改tomcat的server.xml的配置文件,使其支持中文,在Connector标签下加入URIEncoding="GBK"(或“UTF-8”)

1 <Connector port="8080" maxHttpHeaderSize="8192"
2   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3   enableLookups="false" redirectPort="8443" acceptCount="100"
4   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

2、在Action或目的页面中接收参数的值时,指定编码方式

1 try {
2      name = new String(name.getBytes("ISO-8859-1"), "utf-8");
3 } catch(Exception e) {
4      e.printStackTrace();
5 }  

但是使用这种方式,会有一种问题,那就是当一个页面既有用表单提交的内容(如:name1),也有用超链接提交这个内容(name1)时,在接收界面就要判断到底是用那种方式提交过来的,如果是前者(post),则不需要用上面的指定编码方式的方法来接收,若果用了,反而会乱码。如果是后者(get),则必须使用上面指定编码方式的方法来接收。这样一来,还需要在跳转的url中多加一个标志位来判断到底是用哪种方式提交过来的。不是很方便。

3、超链接提交转化为表单的post提交(这是网上别人的blog里写的,我就直接拷贝过来了)

 1 function linkClick(linkObject) {
 2
 3     var formObject = document.createElement(‘form‘);
 4     document.body.appendChild(formObject);
 5      formObject.setAttribute(‘method‘, ‘post‘);
 6      var url = linkObject.href;
 7      var uri = ‘‘;
 8      var i = url.indexOf(‘?‘);
 9
10      if(i == -1) {
11         formObject.action = url;
12      } else {
13         formObject.action = url.substring(0, i);
14      }
15
16      if( i >= 0 && url.length >= i + 1) {
17         uri = url.substring(i + 1, url.length);
18      }
19
20      var sa = uri.split(‘&‘);
21
22      for(var i = 0; i < sa.length; i++) {
23        var isa = sa[i].split(‘=‘);
24        var inputObject = document.createElement(‘input‘);
25        inputObject.setAttribute(‘type‘, ‘hidden‘);
26        inputObject.setAttribute(‘name‘, isa[0]);
27        inputObject.setAttribute(‘value‘, isa[1]);
28        formObject.appendChild(inputObject);
29      }
30
31      formObject.submit();
32
33      return false;
34 }  
1 <a href=‘./servlet/MyServlet?name=世界&id=1‘ onclick="return linkClick(this)">click me</a> <br>

使用这种方式,就把超链接的跳转方式转变成为了表单的提交方式,统一为了post方法,那么在目的界面或Action类中接收此参数时,直接接收就行了,不必进行多余的操作。

4、看到还有一种说是在传递中文前,先用java.net.URLEecoder.encode(value),进行编码,在接收时再用java.net.URLDecoder.decode(value) 通过这个语句进行解码,不过我没有弄成功(js代码中URLEecoder.encode(value)没有通过),希望用这种方法成功的人,能告诉我是什么原因,怎么弄。

三、附上我查资料是所看的几篇帖子地址

http://www.iteye.com/topic49/1879

http://blog.csdn.net/rodjohnsondoctor/article/details/6989273
http://xuxiaolei.iteye.com/blog/187024

 

时间: 2024-10-12 07:01:19

超链接传递中文出现乱码问题的相关文章

SSH通过超链接传递中文参数出现乱码问题

通过超链接传递中文参数出现乱码问题 tomcat中的server.xml文件中修改如下配置: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

url 传递中文参数乱码问题的终极解决方法。

估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf-8 或者gb2312. encodeURI(url),也有人说要2个encodeURI,如:window.location.href = encodeURI('b.html?cId='+id+"&cName="+encodeURIComponent(name)); 然后后台Str

javascript通过url向jsp页面传递中文参数乱码解决方法

解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="java.net.*" %><%String str0=&

asp.net如何解决传递中文参数乱码问题

其实,解决此问题很简单,只需在传递的中文参数用escape()就可以解决了,至于后台c#只需用Page.Request.Params来获取就可以了! 版权声明:本文为博主原创文章,未经博主允许不得转载.

freemarker在url中传递中文参数乱码

在freemarker将URL的编码格式设置为自己想要的格式: <#setting url_escaping_charset='utf-8'> 然后再参数后面加上"?url",这样传递到后台的参数编码就是就是你想要的格式了. 详情参见下面的代码: <#list signFileList as signFile> <#setting url_escaping_charset='utf-8'> <div style="padding:3p

jquery.ajax的url中传递中文乱码问题的解决方法

jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8

AJAX在GBK编码页面中传中文参数乱码的问题

---恢复内容开始--- 页面编码是GBK的情况下传递中文有乱码,解决方法如下: 在ajax传递前用若是Array,JSON,等其它对象,可用JSON.stringfy字符串序列化后,赋值给ajax传递, 在后台获取后,对于未使用JSON.stringfy序列化的情况下,直接转码:将utf-8转成gbk编码的,再处理. 在后台进行转码. mb_convert_encoding($brand_name, "GBK", "utf-8"); 另一种解决方法 jQuery(

【Web后端笔记】jsp传递中文数据出现乱码的问题

JSP文件中乱码现象经常遇到,那如何处理就是我们不可避免的话题,那么该如何解决呢,下面我针对不同的情况,给出几种处理方式: 1) JSP页面中文乱码,这种情况比较好处理,在页面的page指令中加上如下一项就行 <%@ page contentType=”text/html;charset=UTF-8” %> 2) JSP页面采用表单提交时,提交的数据中包含中文,并且提交方式为post这时我们获取表单数据后,展示到其它页面时会出现乱码,解决方案是在获取请求中的参数前,先设置请求的字符集. 1 r