JS的URL编码。

本文介绍了JavaScript中处理URL编码的方法,包括encodeURI、encodeURIComponent及其对应的解码函数,并对比了Java中的URLEncoder和URLDecoder,指出了不同编码方式可能导致的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS中处理URL编码的函数

  • escape()和unescape()

从ECMAScript v3标准中删除了。

  • encodeURI()和decodeURI()

他可以将整个URL中的字符进行UTF-8编码,在每个码值前加上“%”

  • encodeURIComponent()和decodeURIComponent

比encodeURI()编码还要彻底,除了几个字符不编码,对其他所有字符都编码。这个函数通常用于将一个URL当作一个参数放在另一个URL中。

Java与JS编解码问题

    在Java端处理URL编解码有两个类,分别是java.net.URLEncoder和java.net.URLDecoder。这两个类可以将所有“%”加UTF-8码值用UTF-8解码,从而得到原始的字符。查看URLEncoder的源码你可以发现,URLEncoder受保护的特殊字符要少于在JS中受保护的特殊字符。Java端的URLEncoder和URLDecoder与前端JS对应的是encodeURIComponent和decodeURIComponent。
    注意,前端用encodeURIComponent编码后,到服务端用URLDecoder解码可能会出现乱码,这一定是两个字符编码类型不一致导致的。JS编码默认的是UTF-8编码,而服务端中文解码一般都是GBK或者GB2312,所以用encodeURIComponent编码后是UTF-8,而Java用GBK去解码显然不对。解决的办法是用encodeURIComponent两次编码,如encodeURIComponent(encodeURIComponent(str))。这样在Java端通过request.getParameter()用GBK解码后取得的就是UTF-8编码的字符串,如果Java端需要使用这个字符串,则再用UTF-8解码一次;如果是将这个结果直接通过JS输出到前端,那么这个UTF-8字符串可以直接在前端正常显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值