刚才在做日期格式化时需要将汉字进行编码再解码输出,所以就查了一下,只有字母和数字 [0-9a-zA-Z]
、一些特殊符号 $-_.+!*'(),
,以及某些保留字,才可以不经过编码直接用于 URL;一共有2对编/解码函数:
// 前后一一对应关系:编码和解码
encodeURI 和 decodeURI();
encodeURIComponent() 和 decodeURIComponent();
看着挺相似的,下面看一下它们的区别:
- encodeURI 和 decodeURI()
- 定义和用法:
decodeURI()
函数可对encodeURI()
函数编码过的 URI 进行解码。 - 语法:decodeURI(URIstring)
- 参数/描述:
URIstring
必需。一个字符串,含有要解码的 URI 或其他要解码的文本。 - 返回值:
URIstring
的副本,其中的十六进制转义序列将被它们表示的字符替换。 - 不会被此方法编码的字符:
! @ # $ & * ( ) = : / ; ? + '
- 定义和用法:
encodeURI()
是 Javascript 中真正用来对 URL 编码的函数。
它着眼于对整个 URL 进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号 ; / ? : @ & = + $ , #
,也不进行编码。编码后,它输出符号的 utf-8 形式,并且在每个字节前加上 %
。
- 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/