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

一: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编码与两次encodeURI:http://blog.sina.com.cn/s/blog_8af112fd0102vxb7.html
---------------------

原文地址:https://www.cnblogs.com/niudaxianren/p/9988079.html

时间: 2024-10-09 07:14:41

get请求中url传参中文乱码问题--集锦的相关文章

Java URL传参中文乱码问题

我们经常会遇到这样的场景:在URL中传递参数,如果该参数为中文,如果设置不当,会出现乱码问题. URL传参所使用的编码为服务器中设置的编码,而ajax请求的编码为页面编码. 如果不设置tomcat的默认编码为ISO-8859-1,而如果在设置中加入 useBodyEncodingForURI="true" <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="

关于url传参中文乱码问题

之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/contest/get_teams_by_type_with_page?typeName=新材料 当在windows 跑 myeclipse的命令台  能正确打印出typeName的参数,而且持久层并没有问题. 当在 linux 跑catalina模式  打印出乱码,持久层也是乱码. 百度了好几个好几

asp.net 页面通过URL传参中文乱码的三种解决方案

1.编码 string state=Server.UrlEncode(stateName.Text.Trim());Response.Redirect("aaa.aspx?state="+state+""); 2.解码(aaa.aspx) string state= Server.UrlDecode(Request.QueryString["state"].ToString()); 是GB2312编码的,参数传值是UTF-8编码的 解决的方法一般

URL传参中文乱码、点链接弹出子窗口

方法一: String ssdwhbm = new String(getRequest().getParameter("ssdwhbm").getBytes("iso8859-1"),"utf-8"); 方法二: <a href="javaScript:void(0)" onclick="paixu('${l.ssdwhbm}')" >排序</a> <script type=&

java中URL参数的中文乱码问题

**同学们在url传参的时候 是否应为传了中文导致各种乱码问题呢? URL传参中文对于程序员来说,是个很头疼的问题吧.虽然在尽量避免使用中文参数,但总有避免不了的时候.现就自己的经验,总结如下:** 1.将字符串转码:newString("xxxxx".getBytes("iso-8859-1"),"utf-8") 这种转码方式有很大的弊端,因为它是使用指定的字符集将此String编码为 byte 序列,并将结果存储到一个新的byte 数组中,然

页面传参中文乱码解决方案

jsp页面传递参数到servlet,只要参数有中文就是乱码,大多数是??????乱码,尝试了网上比较普遍的好多种办法都不行,最后加了一句话解决掉,分享给大家. 1.打开tomcat安装目录 2.找到conf文件夹 3.打开里面的server.xml 4.找到 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443

【WEB】jsp向servlet传参中文乱码问题解决

传参方式:POST.GET.link方式 servlet向jsp传中文参数msg 1 if(username.equals("") || password.euqals("")){ 2 msg = "用户名密码不能为空"; 3 String encodeMsg = java.net.URLEncoder.encode(msg, "GBK"); // URLEncoder参数进行转码,地址栏参数为16进制码 4 String u

在IE浏览器中url传参长度问题

1.在这之前我一直以为,应该说是并没有去思考过,url地址传参的长度限制问题:知道在项目材料价格系统中遇到之后,才对这个问题进行了具体的探索.IE中最大的长度限制为2084个,用于get传递数据的长度是2048个字节.所以在某些传参情况下,使用url地址传参就不可以实现.所以采用了下面的这种解决方案: 后台中接收参数用: 一般的接收用的是Context.Request["a"]就可以了.这里要加上Form进行取值!!! 原文地址:https://www.cnblogs.com/9527

window.location.href传参中文乱码问题

window.location.href="${pageContext.request.contextPath}/story/exportStoryInfo?domainId="+domainIds                                                +"&requirementName="+requirementName; 前端页面需求名称输入"4.19活动",传递到后台时出现中文乱码问题: 解