escape()、encodeURI()、encodeURIComponent()三种编码方式的区别

  最近在项目中都遇到了编码的问题,有对字符串进行编码的,也有对 URL 进行编码了,明明是挺简单的问题,但着实也给自己挖了好多坑啊,所以今天来记录一下这三种编码方式的区别。

一、区别

1、escape()

  escape 函数是对字符串进行编码的,作用是让他们在所有电脑上可见。编码之后的效果是 %XX 或者 %uXXXX 这种形式。解码函数:unescape()

  其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。同时这个方法只适用于字符串,不适用于 URL 编码。

2、encodeURI()encodeURIComponent()是一类

  这两种方法都是对URL进行编码的,唯一的区别是编码的范围不一样。

  encodeURI方法不会对下列字符编码 :ASCII字母、数字、~!@#$&*()=:/,;?+'。解码函数:decodeURI()

  encodeURIComponent 方法不会对下列字符编码: ASCII字母、数字、~!*()'。解码函数:decodeURIComponent()

  由此可见,encodeURIComponent 编码范围比 encodeURI 的大。

二、应用范围

  如果只是对字符串进行编码,与URL没有任何关系,那么 escape 方法是最合适的。

如果要编码整个URL,那就用 encodeURI 方法。

  如果 URI 组件中含有分隔符,比如 ?#,则应当使用 encodeURIComponent() 方法分别对各组件进行编码

如果要编码 URL ,但需要跳转地址,那只能用 encodeURI 方法,因为encodeURIComponent 会对 :/ 进行编码,会导致没法跳转地址。

三、测试代码

encodeURI('=')
// '='

encodeURIComponent('=')
// '%3D'

encodeURI('?')
// '?'

encodeURIComponent('?')
// '%3F'

// 在浏览器地址栏输入结果能跳转
encodeURI('http://www.baidu.com?name=张三&age=18')
// 'http://www.baidu.com?name=%E5%BC%A0%E4%B8%89&age=18'

// 在浏览器地址栏输入结果不能跳转, http:// 被转码破坏
encodeURIComponent('http://www.baidu.com?name=张三&age=18')
// 'http%3A%2F%2Fwww.baidu.com%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D18'

转载:

escape()、encodeURI()、encodeURIComponent()三种编码方式的区别

posted @ 2022-08-09 17:51  暗恋桃埖源  阅读(476)  评论(0编辑  收藏  举报