get方式提交中文及特殊字符,javascript处理乱码问题

在Javascript中二次使用encodeURIComponent对目标字符进行编码处理,使其成为符合要求的编码格式。

encodeURIComponent(encodeURIComponent('中文#@$^&*=-+_'));

使用encodeURIComponent,而不是encodeURI是为了根据需求解决特殊字符无法转码的问题。

(escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z)

为什么要二次使用encodeURIComponent呢?

因为服务器端tomcat会在你做解码之前自动先对URL做一次decode解码,所以客户端要编码两次,服务器端只解码一次就OK了。

如果只使用一次encodeURIComponent,会怎样呢?

如果只使用一次encodeURIComponent编码的话,则传递到Servlet的就是已经处理过的中文字符,而不是纯粹的ASCII字符

(此处应该是%E4%B8%AD%E6%96%87%23%40%24%5E%26*%3D-%2B_),自然而然,此时再进行

java.net.URLDecoder.decode("中文#@$^&*=-+_","utf-8");就不会得到正确的结果。

例子2:

首先,如果是在js端的代码,用window.href进行请求时,需要进行转码

前台jsp中:

var param = document.getElementById('param').value;
param = encodeURI(encodeURI(param));//注意,是两次转码,我就被这个坑过

后台java类中:

String param = request.getParameter("param")
groupBuyerName=URLDecoder.decode(param,"utf-8");

这样,param就被转换成了utf-8的码了,而且当直接从url上进行输入的时候,同样也能转码

例子3:

在接受get传参过来的值的时候,如果get传参的值有中文的话,

比如::

那么在接收这个参数的时候,必须给这个中文解码(因为有些浏览器会默认给中文编码,上一个页面可以没有urlencode,用urlencode只是想改变浏览器解析一些特殊字符的情况,而这个时候我们不需要改变,所以不需要urlencode)

$name=urldecode($_GET['name']);

原文链接1:https://blog.csdn.net/u011066648/article/details/37657859

原文链接2:https://www.cnblogs.com/renboqie/p/5988893.html

原文链接3:http://blog.sina.com.cn/s/blog_95e7b0f40101l5lh.html

猜你喜欢

转载自blog.csdn.net/qq_38666502/article/details/81181996