encodeURI和encodeURIComponent

encodeURI和encodeURIComponent的作用对象都是URL,唯一的区别就是编码的字符范围:

  • encodeURI不会对ascii字母、数字、~!@#$&*()=:/,;?+' 进行编码。
  • encodeURIComponent不会对ascii字母、数字、~!*()'进行编码。

所以encodeURIComponent比encodeURI的编码范围更大。比如说,encodeURIComponent会把 http://编码成 http%3A%2F%2F,而encodeURI不会。

一个字符串需要编码,说明其中有一些字符不适合传输。

  • 如果要将一个URL通过网络传输,则需要使用encodeURI编码。比如URI中出现了中文,中文在网络中是不能直接传输的,需要经过URI编码。

    事实上,我们在浏览器中输入一个含有中文参数的URL,在发出请求后,会自动使用encodeURI进行编码。

  • 如果要将一个URL作为一个查询参数放到另一个URL中,则需要使用encodeURIComponent编码。因为这个作为参数的URL中会包含:/?=&这些字符,如果不加处理,会解析错误。

const uri = 'https://www.test.com/person/index.asp?name=张三&age=12'
encodeURI(uri)          // "https://www.test.com/person/index.asp?name=%E5%BC%A0%E4%B8%89&age=12"
encodeURIComponent(uri) // "https%3A%2F%2Fwww.test.com%2Fperson%2Findex.asp%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D12"
posted @ 2023-01-30 22:41  hdxg  阅读(554)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css