JS中编/解码函数

刚才在做日期格式化时需要将汉字进行编码再解码输出,所以就查了一下,只有字母和数字 [0-9a-zA-Z]、一些特殊符号 $-_.+!*'(),,以及某些保留字,才可以不经过编码直接用于 URL;一共有2对编/解码函数:

// 前后一一对应关系:编码和解码
encodeURI 和 decodeURI();
encodeURIComponent() 和 decodeURIComponent();

看着挺相似的,下面看一下它们的区别:

  1. encodeURI 和 decodeURI()
    • 定义和用法:decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
    • 语法:decodeURI(URIstring)
    • 参数/描述:URIstring 必需。一个字符串,含有要解码的 URI 或其他要解码的文本。
    • 返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。
    • 不会被此方法编码的字符:! @ # $ & * ( ) = : / ; ? + '

encodeURI() 是 Javascript 中真正用来对 URL 编码的函数。

它着眼于对整个 URL 进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号 ; / ? : @ & = + $ , #,也不进行编码。编码后,它输出符号的 utf-8 形式,并且在每个字节前加上 %

  1. encodeURIComponent() 和 decodeURIComponent()
    • 定义和用法:decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
    • 语法:decodeURIComponent(URIstring)
    • 参数/描述:URIstring 必需。一个字符串,含有编码 URI 组件或其他要解码的文本。
    • 返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

encodeURIComponent()encodeURI() 的区别是,它用于对 URL 的组成部分进行个别编码,而不用于对整个 URL 进行编码。

因此,; / ? : @ & = + $ , # 这些在 encodeURI() 中不被编码的符号,在 encodeURIComponent() 中统统会被编码。至于具体的编码方法,两者是一样。

实例:


var text = "http://www.wljcz.com/My first/",
    code = encodeURI(text),
    decode = decodeURI(code);

console.log(code); // http://www.wljcz.com/My%20first/
console.log(decode); // http://www.wljcz.com/My first/

var text = "http://www.wljcz.com/My first/",
    code = encodeURIComponent(text),
    decode = decodeURIComponent(code);

console.log(code); // http%3A%2F%2Fwww.wljcz.com%2FMy%20first%2F
console.log(decode); // http://www.wljcz.com/My first/
发表评论
* 昵称
* Email
* 网址
* 评论