【原】聊一聊 url 编码问题

 
 最近路蒙碰到需要编码的一个题目,在encode和encodeURIComponent上绕了个小圈,所以打算总结一下js的编码问题,网上也发出许多近乎的篇章,不过也,总结下的事物才是投机滴

怎么要针对URI进行编码?

 对于Url来说,之所以要进行编码,是以Url中稍加字符会引起歧义。

貌似的话,URL只能采用英文字母、阿拉伯数字和一些标点符号,不可知应用其它文字及符号。这是以网络正式RFC
1738召开了硬性规定:

原文:"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

翻译:“只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。”

可该网络正式却无规定说怎么进行编码,交给了浏览器来自己来支配,浏览器目前的一个通用做法是除a-zA-Z0-9.-_以外,都进行%替换。

老三栽编码方式的介绍

Javascript中提供了3对函数用来针对Url编码以获得官方的Url,它们各自是

escape 编码–》 unescape 解码

encodeURI 编码–》 decodeURI 解码

encodeURIComponent 编码–》 decodeURIComponent解码。

解码和编码的过程是可逆的,因此了解了编码过程就得领略解码过程,所以只需要介绍编码过程即可

 

下的表列有了当时三个函数的安全字符(即函数不会见针对这些字符进行编码)

图片 1

 

什么是 ASCII 字符

在介绍那三个道之前,先来打听一下ASCII字符。

维基百科:

ASCII(American Standard Code for Information
Interchange,美国消息相互换标准代码)是依据拉丁字母的相同模拟电脑编码系统。它要用来展示现代英语与其它西欧语言。它是现最为通用的单字节编码系统,并一致于国际标准ISO/IEC
646。

以下是一些ASCII码对照表:

图片 2

escape—> unescape

 该方式无会见指向 ASCII 字母和数字进行编码,也未会见针对下面这些 ASCII
标点符号进行编码: * @ – _ + . / 。其他具备的字符都见面给转义序列替换。

这法子属于过时产物,ECMAScript v3 不予使用该法,应用使用
encodeURI() 和 encodeURIComponent()
替代她。所以这边不对准escape进行过多的介绍。

也就是说,以后没有啥事最好好永不就此escape来编码了,会时有发生题目,之前的一个项目即使赶上了一个坑。

 

encodeURI—> decodeURI

    encodeURI
着眼于对普URL进行编码,除了周边的符以外,对另一些在网址中来突出含义的号“;
/ ? : @ & = + $ ,
#”,不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

    也由encodeURI不会见编码“; / ? : @ & = + $ ,
#”等,因此它可怜适用于来编码完整的url,因为这些字符是用来分主机及路线的。它对应的解码是decodeURI

encodeURIComponent—>decodeURIComponent

 
 从地方提到的安字符范围表格来拘禁,我们会发觉,encodeURIComponent编码的字符范围要比encodeURI的雅。

 
 它跟encodeURI的区别就是,encodeURI是对准普url进行编码,而encodeURIComponent是本着url的独家片开展编码。因此,像“;
/ ? : @ & = + $ , #” 这些吗是会见被编码的。

  所以如果您如编码的是url的同样局部,而不是整整url,用encodeURIComponent编码是不错的选取。平时的工作被,用encodeURIComponent的几率多或多或少

小结

   发觉url的编码为没太多而聊的。最后做只小小总结。

1、escape() 已被弃用,不多说,反正不要用便是了 

2、encodeURI():编码整个url地址,对特殊符号,如 “; / ? : @ & = + $ ,
#”,不开展编码,对应的解码函数是:decodeURI()。

3、encodeURIComponent() :能编码”; / ? : @ & = + $ ,
#”这些特殊字符。编码url中的一部分零件,用的较多。对应之解码函数是decodeURIComponent()。

  最后重复来张表格:

 图片 3