关于url编码以及其中两个编码函数
encodeURI,EncodeURIComponent
通常如果⼀样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过⼤,包含隐私数据,对于Url来说,之所以要进⾏编码,是因为Url中有些字符会引起歧义。
例如,Url参数字符串中使⽤key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进⾏转义,也就是对其进⾏编码。
⼜如,Url的编码格式采⽤的是ASCII码,⽽不是Unicode,这也就是说你不能在Url中包含任何⾮ASCII字符,例如中⽂。否则如果客户端浏览器和服务端浏览器⽀持的字符集不同的情况下,中⽂可能会造成问题。也就说,如果客户端⽤的是url编码,那么服务端必须也得是url解码,这样才能保证数据会被完整的传输和正确解析出来。
RFC3986⽂档规定,Url中只允许包含英⽂字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。因此对于Url⽽⾔,只有普通英⽂字符和数字,特殊字符$-_.+!*'()还有保留字符,才能出现在未经编码的Url之中。其他字符均需要经过编码之后才能出现在Url中。对于Url中的这些字符,编码和不编码是等价的
保留字符如下:
! * ' ( ) ; : @ &
= + $ , / ? # [ ]
以下是url编码对应的两个接⼝函数,以及对应的安全字符,
encodeURI和encodeURIComponent使⽤UTF-8对⾮ASCII字符进⾏编码,然后再进⾏百分号编码。
encodeURIComponent编码的字符范围要⽐encodeURI的⼤,保留字符⼀般是⽤来分隔URI组件(⼀个URI可以被切割成多个组件,参考预备知识⼀节)或者⼦组件(如URI中查询参数的分隔符),如:号⽤于分隔 scheme和主机,?号⽤于分隔主机和路径。由于encodeURI操纵的对象是⼀个完整的的URI,这些字符在URI中本来就有特殊⽤途,因此这些保留字符不会被encodeURI编码。
encodeURI(82个) !#$&'()*+,/:;=?@-._~0-9a-zA-Z
encodeURIComponent(71个) !'()*-._~0-9a-zA-Z
>在线url网址编码解码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论