JS的URL编码。

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字符串可以直接在前端正常显示。

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/81330824
今日推荐