get请求中url传参中⽂乱码问题
url编码和utf8区别在项⽬中经常会遇到中⽂传参数,在后台接收到乱码问题。那么在遇到这种情况下我们应该怎么进⾏处理让我们传到后台接收到的参数不是乱码是我们想要接收的到的,下⾯就是我的⼀些认识和理解。
⼀:get请求url中带有中⽂参数,有三种⽅式进⾏处理防⽌中⽂乱码
1、如果使⽤tomcat作为服务器,那么修改tomcat配置⽂件l中,在 <Connector port="8082" protocol="HTTP/1.1" 中加
⼊ URIEncoding="utf-8"的编码集
2、前台需要对中⽂参数进⾏编码,调⽤js⽅法encodeURI(url),将url编码,然后请求。
后台接受时,需处理String str = new Parameter("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)后台解码处理
在后台接收参数时候,⾸先通过Parameter()⾃动进⾏第⼀次解码(可能是 gb2312,gbk,utf-8,iso-8859-1等字符集,对结果⽆影响)得到ascii字符,然后再使⽤UTF-8进⾏第⼆次解码,通常使⽤ java.URLDecoder("","UTF-8")⽅法。
两次编码两次解码的过程为:
UTF-8编码->UTF-8(iso-8859-1)编码->iso-8859-1解码->UTF-8解码,编码和解码的过程是对称的,所以不会出现乱码。
注:
1:这种两次encodeURI⽅式不⽤去知道服务器的解码⽅式,也可以得到正确的数据。
2:get请求建议尽量不带中⽂参数,如果使⽤建议使⽤两次encodeURI进⾏编码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论