您的位置:首页 > Web前端 > JavaScript

JS为什么有时候要做两次encodeURI

2014-03-27 00:38 190 查看

JS为什么有时候要做两次encodeURI

这个问题的根本原因是服务器会自己做一次解码,且解决的字符集不一定是UTF-8。

对于var url = "b.jsp?name="+u_name; 要想把中文的name传到后台,需要对url进行一次编码,否则是乱码。

A.

前端:var url1=encodeURI(url);

后台:String name=request.getParameter("name");

有时会乱码,为什么?

因为接收时, 直接

String paramValue = request.getParameter(paramName);

Tomcat容器会自动解码

encodeURI使用的是 UTF-8 编码规则来编的。如果 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,没有问题。如果容器没有按 UTF-8 解的话, 结果只有一个,就是乱码!

容器按什么编码来解码,决定于 request.setCharacterEncoding(***) 或者 服务器程序配置。如果能设置request.setCharacterEncoding("UTF-8")并修改服务器配置,让容器在解 GET 提交的参数时,使用UTF-8,则没有任何问题。

B.

前端:url1=encodeURI(url);

url2=encodeURI(url);

后台:String name1=request.getParameter("name");

String name2 = java.net.URLDecoder.decode(name1,"UTF-8");

不管容器用的什么编码,都不会有乱码:
url1会把url中的中文编为ASCII码。
url2对url1进行再编码,由于是对ASCII码进行编码,在request.getParameter("name")解码的时候,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到url1。
因为ASCII码用GBK、UTF-8、ISO-8859-1编码的结果是相同的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐