url 中文传参 乱码问题

开发一直用firfox网页,调试什么的都很方便。因此遇到了浏览器之间的兼容问题。url中文传参。chrome

问题:前台用url传值中文,后台用request.getParameter接收参数。浏览器

       用firfox,chrome等没有问题。用ie会出现接参乱码现象。tomcat

 

上网查了一下,算了,仍是把原文帖上来吧。比较容易懂。服务器

 

  让jsp正确解释含有中文的URL以及传递中文参数是一个颇有用的特性,也是比较复杂的。我去年的一个小项目中就碰到了在URL中传递中文参数的问题,可是当时因为对Jsp还不是很熟悉,因此没有解决这个问题于是舍弃了一部分功能。
  
  可是,这个问题确实得解决,由于在即将展开的一个项目中确定得用它。因而,今天花了一天的时间来研究这个问题,好在功夫不负有心人,如今问题终于解决了。下面就作一下介绍:
  
  IE、Firefox、Opera三种浏览器对URL的传输的处理各不相同,浏览器在传输URl时得对URL进行编码,IE默认是以UTF-8来传输的,Opera可能也是以UTF-8编码的,Firefox通过测试确定不是以UTF-8来编码的,有多是以ISO-8859-1来编码的。因此若是不对中文进行处理,那么中文字符经各个浏览器以本身的编码方式传输到服务器后就出现了各类编码方式,而服务器却只能以一种编码方式来对接收到的URL进行解码。这样的话,和服务器使用的编码方式同样的浏览器在使用带中文的URl时不会出现问题,其余的浏览器则会出现问题。
  
  因此解决的办法就是在URL进行传输以前对其中的中文进行编码,使用的编码是和服务器同样的编码,假设服务器使用的编码是UTF-8,则编码语句以下:URLEncoder.encode("中文","UTF-8")。这样对中文进行编码后全部的浏览器都不会再用他们默认的编码方式对中文进行编码,由于此时浏览器看到的已经不是中文了,而是编码后的字节码。这样就避开了浏览器传输URL时编码的差别性问题。
  
  对中文参数问题的解决方式和上面同样。但这里所指的中文参数是指以?name="中文参数"方式附在URL后,以get方法传输到服务器的这种形式,并非以表单形式提交到服务器的。各浏览器对中文参数的处理方式和各自对URL中中文的处理方式都不相同,各浏览器之间也有差别,有的在传输以前不进行编码,有的在传输以前就已经进行了编码,情形很是复杂。
  
  可是咱们以不变应万变,都用URLEncoder.encode("中文","UTF-8")对中文参数进行编码,这样无论各浏览器怎样对中文参数进行处理,此时通过咱们编码后的中文对浏览器来讲就是字节码,与a、b、c等字母没有什么区别。可是服务器会用UTF-8编码形式来还原中文参数。
  
  总结一下:以Tomcat服务器为例,在中添加URIEncoding="UTF-8",设置tomcat以utf-8的编码方式来处理URL。其次,对URL中的中文和中文参数都用URLEncoder.encode("中文","UTF-8")进行编码。
jsp

 

 

再有,就是在后台进行转码。函数

 

点击后打开新页面,用户登陆!用户名为中文时,火狐、google浏览器无问题,但IE有乱码问题:测试

 

方法三: 

若是用jstl的话,能够本身写一个el的function,调用URLEncoder.encode来编码。 

IE缺省对URL后面的参数是不编码发送的,可是tomat缺省是按ISO8859-1来进行URL解码,所以才会出现上述错误。好的作法是: 

1、在URL参数中确保用UTF-8编码之,方法能够用js函数encodeURI(),或调用自定义的el function; 

2、设置server.xml中的Connector熟悉URIEncoding="UTF-8",确保解码格式与编码格式统一; 

方法四: 

<script> 

for(var i=0;i<document.links.length;i++){ 

document.links[i].href=encodeURI(document.links[i].href); 

} 

</script> 

在action中,String s=request.getParameter("s"); 

s=new String(s.getBytes("iso-8859-1"),"gbk"); 
相关文章
相关标签/搜索