js为什么需要做两次encodeURL编码?

这个问题的根本原因是服务器会自己做一次解码,且解决的字符集不一定是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编码的结果是相同的

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值