encodeURI和encodeURIComponent之间的区别

encodeURI与encodeURIComponent之间的区别和适用场景

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

  • encodeURI不会对以下字符进行编码ASCII字母 数字 ~!@#$&*()=:/,;?+’
  • encodeURIComponent方法不会对以下字符编码 ASCII字母 数字 ~!*()’

结论:encodeURIComponent 比 encodeURI的编码范围更大。
例如:encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。

适用场景
encodeURI编码后url仍可以适用而,即如果还需要使用改URL进行网络传输则可以使用encodeURI。例如URL出现了中文,中文在网络中无法直接传输,则URL需要编码。
(事实上,我们在浏览器中输入一个含有中文参数的URL,在发出请求后,会自动使用encodeURI进行编码。所以有的带中文的url在浏览器可以使用,而在小程序中用不了,大概也是这个原因)

encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//encodeURI编码后会变为(空格被编码成了%20)
"http://www.cnblogs.com/season-huang/some%20other%20thing";
//encodeURIComponent编码后会变为(连 "/" 都被编码了,整个URL已经没法用了)
"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"

对于带参数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"

  • 为了避免服务器收到不可预知的请求,对任何用户输入的作为 URI 部分的内容你都需要用 encodeURIComponent 进行转义。
  • 比如,一个用户可能会输入"Thyme &time=again"作为comment变量的一部分。如果不使用
    encodeURIComponent 对此内容进行转义,服务器得到的将是comment=Thyme%20&time=again。
  • 请注意,"&“符号和”="符号产生了一个新的键值对,所以服务器得到两个键值对(一个键值对是comment=Thyme,另一个则是time=again),而不是一个键值对。
  • 对于 application/x-www-form-urlencoded (POST) 这种数据方式,空格需要被替换成
    ‘+’,所以通常使用 encodeURIComponent 的时候还会把 “%20” 替换为 “+”。

参考:escape,encodeURI,encodeURIComponent有什么区别? - 大黄的回答 - 知乎
https://www.zhihu.com/question/21861899/answer/20300871

https://www.cnblogs.com/hdxg/p/17077467.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值