1简介1.1背景网页的URL只能包含合法的字符。合法字符分为两类。URL元字符:分号(;)、逗号(,)、斜杠(/)、问号(?)、冒号(:)、at(@)、&、等号(=)、加号(+)、美元符号($)、井号(#)语义字符:a-z、A-Z、0-9、连字符(-)、下划线(_)、点(.)、感叹号(!)、波浪号(~)、星号(*)、单引号(')、圆括号(())除上述字符外,其他字符出现在URL中时必须进行转义。规则是根据操作系统默认的编码,将每个字节转换成百位。分号(%)后跟两个大写十六进制字母。例如,在UTF-8操作系统上,URLhttps://www.baidu.com/s?ie=UTF-8&wd=中国,汉字“中国”在URL中不是合法字符,所以它由浏览器自动转换。进入https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E5%9B%BD。其中,“中”转换为%E4%B8%AD,“国”转换为%E5%9B%BD。这是因为“中国”和“国家”的UTF-8编码分别是E4B8AD和E59BBD。在每个字节前加一个百分号就构成了URL编码。1.2编码/解码方法encodeURI()encodeURIComponent()decodeURI()decodeURIComponent()其中decodeURI()和decodeURIComponent()用于解码URL片段。它们分别是encodeURI()和encodeURIComponent()方法的逆操作。2使用2.1encodeURI()encodeURI()方法用于对整个URL进行转码。它的参数是一个代表整个URL的字符串。它转义元字符和语义字符以外的字符。示例如下:encodeURI('https://www.baidu.com/s?ie=UTF-8&wd=China')//输出:https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E5%9B%BD2.2encodeURIComponent()encodeURIComponent()方法用于对URL组件进行转码,除语义字符外的所有字符都会被转码,即元字符也会被转码。因此,它不能用于转码整个URL。它接受一个参数,即URL的一个片段。示例如下://转码URL中的特殊编码字符'https://www.baidu.com/s?ie=UTF-8&wd='+encodeURIComponent('China')//Output:"https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E5%9B%BD"//转码URL中的回调链接'https://www.baidu.com/s?returnURL='+encodeURIComponent('http://www.test.com/')//输出:"https://www.baidu.com/s?returnURL=http%3A%2F%2Fwww.test.com%2F"2.3解码decodeURI()、decodeURIComponent()用于解码URL片段。它们分别是encodeURI()和encodeURIComponent()方法的逆操作。两种解码方式只接受一个输入参数,即转码后的字符串;例子如下://decodeURIdecodeURI("https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E5%9B%BD")//输出:https://www.baidu.com/s?ie=UTF-8&wd=China//decodeURIComponentdecodeURIComponent("http%3A%2F%2Fwww.test.com%2F")//输出:"http://www.test.com/》3encodeURI()和encodeURIComponent()的区别和使用场景3.1区别从上面我们可以看出encodeURI()方法是用来转码整个URL的,encodeURIComponent()方法是用来转码的URL的组成部分;原因是encodeURI()和encodeURIComponent()有本质区别:encodeURI()不会进行URL元字符转码,encodeURIComponent()会转码URL元字符;这样encodeURIComponent()转码后的URL将无法直接访问;所以encodeURIComponent()一般用于转码一些URL参数;URL元字符:分号(;)、逗号(,)、斜杠(/)、问号(?)、冒号(:)、at(@)、&、等号(=)、加号(+)、美元符号($)、井号(#)3.4使用场景对于没有特殊参数的链接,可以使用encodeURI()进行转码,那么什么特殊情况需要使用encodeURIComponent()呢?通常当链接有一些特殊的参数时,比如下面的链接:https://www.baidu.com/s?returnURL=http://www.test.com/链接中包含回调地址,回调地址是另一个URL,这时候我们需要使用encodeURIComponent()对回调地址进行转码,这样URL中就不会出现多个http://,多个&等特殊字符;方便转换回调地址处理;上面的链接处理如下://在URL中回调链接转码'https://www.baidu.com/s?returnURL='+encodeURIComponent('http://www.test.com/')//Output:"https://www.baidu.com/s?returnURL=http%3A%2F%2Fwww.test.com%2F"
