下面是详细介绍:
Js中escape(),encodeURI()和encodeURIComponent()使用和比较:
escape方法以Unicode格式返回一个包含传入参数内容的string类型的值。 Escape方法会将传入参数中所有的空格、标点符号、重音字符以及其它任何非ASCII字符替换为%xx的编码形式,其中xx与其所表示的字符的16进制数表示形式相同。如空格字符的16进制表示形式为0x20,则此时xx应为20,即escape(‘ ’) 返回“%20”。
escape和unescape方法能够帮助你编码和解码字符串。escape方法对于ISO Latin字符集中的字符组成的参数,返回其16进制编码。相对应的,unescape方法则能将16进制编码形式的参数转化成为其ASCII码形式。
encodeURI方法返回一个经过编码的URI。如果将encodeURI方法的编码结果传递给decodeURI方法作参数,则能得到原始的未编码的字符串。需要注意到是encodeURI方法不编码如下字符":", "/", "", and "?"。如果想要编码这些字符,请使用encodeURIComponent方法。
encodeURIComponent方法返回一个编码过的URI。如果将encodeURIComponent方法的编码结果传递给encodeURIComponent方法作参数,则能得到原始的未编码的字符串。因为encodeURIComponent方法会编码所有的字符,所以如果待编码的字符串是用来表示一个路径(如/dir1/dir2/index.htm)时,就一定要小心使用了。‘/’符号会被其编码之后,将不再是一个有效的路径标识符,所以不能被web服务器正确地识别。当字符串包含一个单独的URI component(指?后面的请求参数)的时候,请使用此方法。
escape()不编码的字符:@*/+
encodeURI() 不编码的字符:~!@#$&*()=:/,?+"
encodeURIComponent()不编码的字符: ~!*()''
函数 描述encodeURI() 把字符串编码为
URI
encodeURIComponent() 把字符串编码为
URI
组件
escape() 对字符串进行编码
上面是查询来自w3school的资料。那么三者之间有什么区别呢,请容我测试测试。
复制代码
代码如下:
var
str
=
"http://localhost:8080/Product/index?id=123&attr=456&area=中国"
console.log(encodeURI(str))
console.log(encodeURIComponent(str))
console.log(escape(str))
打印结果如下:
复制代码
代码如下:
http://localhost:8080/Product/index?id=123&attr=456&area=%E4%B8%AD%E5%9B%BD
http%3A%2F%2Flocalhost%3A8080%2FProduct%2Findex%3Fid%3D123%26attr%3D456%26area%3D%E4%B8%AD%E5%9B%BD
http%3A//localhost%3A8080/Product/index%3Fid%3D123%26attr%3D456%26area%3D%u4E2D%u56FD
可以看出,
encodeURI不会对:/?&等uri中起分割作用的字符进行编码;
encodeURIComponent则会。
观察escape则发现,:?&都被转码了,而/没有,w3school解释是,escape函数会对ascii码中字母、数字及符号(
*
@
-
_
+
.
/
)之外的所有字符进行编码。
另外,我们可以看出escape对汉字“中国”编码后结果与前两者不同。W3SCHOOL也建议不使用该方法,用前两者代替。
以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。
encodeURI 函数对 URI 进行完整的编码
encodeURIComponent 函数假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。
所以encodeURIComponent比encodeURI编码的范围更大。
1、如果只是编码字符串,使用escape
2、如果需要编码整个URL,然后需要使用这个URL,使用encodeURl
3、如果需要编码URL中的参数,使用encodeURlComponent
1、string --->base-64转码
2、base64转码的对象只能是字符串,不能对unicode转码
对于汉字,这就要使用window.encodeURIComponent和window.decodeURIComponent