关闭

get请求中url传参中文乱码问题--集锦

标签: 乱码javawebget请求中文乱码
26043人阅读 评论(2) 收藏 举报
分类:

    在项目中经常会遇到中文传参数,在后台接收到乱码问题。那么在遇到这种情况下我们应该怎么进行处理让我们传到后台接收到的参数不是乱码是我们想要接收的到的,下面就是我的一些认识和理解。

 一:get请求url中带有中文参数,有三种方式进行处理防止中文乱码

    1、如果使用tomcat作为服务器,那么修改tomcat配置文件conf/server.xml中,在  <Connector port="8082" protocol="HTTP/1.1"  中加入  URIEncoding="utf-8"的编码集

    2、前台需要对中文参数进行编码,调用js方法encodeURI(url),将url编码,然后请求。

                  后台接受时,需处理String str = new String(request.getParameter("param").getBytes("iso8859-1"),"UTF-8");

                 原因:tomcat不设置编码时,默认是iso8859-1,即tomcat默认会以iso8859-1编码接收get参数。 以上操作是将参数以iso8859-1编码转化为字节数组,然后再以UTF-8将字节数组转化为字符串。

                  另外需注意在框架的使用中:request.setCharacterEncoding(encoding);只对post请求有效。而且,spring的CharacterEncodingFilter也只是做了request(和response).setCharacterEncoding(encoding);的操作。所以spring的filter配置不作用于get参数接收。

    3、解决get请求,后台接受中文参数乱码处理的方法(搜索功能带参数)

           (1)前台获取数据,在js中进行编码处理

 

             encodeURI函数采用utf-8进行编码,而在服务器的进行解码时候,默认都不是以uft-8进行解码,所以就会出现乱码。

两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上相当于首先进行了一 次UTF-8编码(此时已经全部转换为ASCII字符),再进行了一次iso-8859-1编码,因为对英文字符来说UTF-8编码和ISO- 8859-1编码的效果相同。

 (2)后台解码处理

后台接收参数时候,首先通过request.getParameter()自动进行第一次解码(可能是 gb2312,gbk,utf-8,iso-8859-1等字符集,对结果无影响)得到ascii字符,然后再使用UTF-8进行第二次解码,通常使用 java.net.URLDecoder("","UTF-8")方法。

 

两次编码两次解码的过程为:

UTF-8编码->UTF-8(iso-8859-1)编码->iso-8859-1解码->UTF-8解码,编码和解码的过程是对称的,所以不会出现乱码。

注: 

   1:这种两次encodeURI方式不用去知道服务器的解码方式,也可以得到正确的数据。

   2:get请求建议尽量不带中文参数,如果使用建议使用两次encodeURI进行编码

   3.参考资料     URL编码与两次encodeURIhttp://blog.sina.com.cn/s/blog_8af112fd0102vxb7.html

         

 

          



   

   

   

8
0
查看评论

页面get请求 中文参数方法乱码问题

地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。   js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法, escap...
  • renminzdb
  • renminzdb
  • 2015-01-05 14:12
  • 33962

Java 获取Http Get请求中文参数乱码解决方案

在Java web 中web服务器对于请求参数可以使用request.setCharacter(“”)方法对其进行编码,但是这种方式只会对请求的body部分进行编码解析,对于url中的参数不做处理。 而浏览器默认会使用ISO-8859-1对请求中的中文参数进行编码,所以在服务端java中,如果不做...
  • xieguojun2008
  • xieguojun2008
  • 2015-12-14 17:09
  • 6690

get请求中文参数乱码的解决之道

现在需求是在浏览器里面直接发请求,浏览器发请求,默认发的是get请求,然后带参数,参数包含中文汉字。麻烦就在这里,参数里面的汉字,在后台接收的时候,是乱码。 这么简单的传递参数的方式,是不OK的。 下面看详情。 这个就是简单的在URL里面带中文汉字参数,然后,就在后台乱码了,哦。这就悲剧啦。 ...
  • qq_27093465
  • qq_27093465
  • 2017-08-21 17:54
  • 1628

Get,Post请求中文乱码问题有效解决方法

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 http://zhaomin819111.blog.163.com/blog/static/106...
  • rchm8519
  • rchm8519
  • 2014-12-14 22:57
  • 58500

HTML get 方法获取中文参数乱码问题

编码部分:  var url = "receive.html?value1=" + value1 + "&value2=" + "参数中文参数"; 13 url=encodeURI(url); ...
  • yhf1234567
  • yhf1234567
  • 2017-04-21 16:26
  • 475

SpringMVC之GET请求参数中文乱码

只怪自己项目做太少,遇到这些问题纠结太久,浪费时间太多. 在此记录, WEB.XML文件中的编码过滤器设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat,conf目录下的server.xml配置...
  • A350204530
  • A350204530
  • 2017-04-10 20:48
  • 1027

get请求,中文乱码解决 之 百度如何正确获取中文请求参数(我猜测)

url查询串不直接支持中文等非ASCII码表符号的传输,需要经过浏览器采取一种编码方案将中文字符编码为可用于url传输的符号(也就是ASCII码的符号)。除这种类似中文查询串的情况外,url中有特殊用途的符号,例如%,@, :, &,#,?等也不能直接传输,同样需要编码后传输。关于URL编码...
  • u013786868
  • u013786868
  • 2015-10-21 11:57
  • 3573

get方式传值中文乱码

如下情况: <a id="bookname" title="${book.bname }" href="<c:url value='/BookServlet?method=findByBname&bname=${...
  • gg12365gg
  • gg12365gg
  • 2016-08-28 19:14
  • 11057

url里含有中文参数,已get方式提交到接口,中文编码后有乱码问题的一种解决

spring mvc接收中文参数乱码问题 我的博客:www.while0.com 今天测试spring mvc  ,中文乱码。根据网上的建议,更改过滤器,在web.xml中加上 1 filter> 2 filter-name>Chara...
  • b452608
  • b452608
  • 2015-12-11 16:05
  • 1739

Get请求中文乱码问题有效解决方法

项目中遇到在前台用get方法传递中文到后台拿到的是乱码问题,花了好长时间解决, 下面是解决办法:     1、在IDEA编辑器里的编码格式都改成utf-8。     2、Get方式的乱码问题,由于参数是通过URL传递的,需要在服务器端配置URL编码格式。...
  • a1165117473
  • a1165117473
  • 2017-07-28 10:35
  • 763
    个人资料
    • 访问:467254次
    • 积分:5959
    • 等级:
    • 排名:第5078名
    • 原创:169篇
    • 转载:16篇
    • 译文:0篇
    • 评论:161条
    联系方式
    博客专栏
    最新评论