url_parser
简介
URL编码/解码转换
基本概念:
- 百分号编码(Percent-encoding), 也称作URL编码(URL encoding), 是特定上下文的统一资源定位符 (URL)的编码机制。
- 不安全字符:在URL中没有特殊含义,但在URL所在的上下文中可能具有特殊意义的字符,需要进行编码处理。
RFC3986文档规则URL中只允许包含未保留字符以及所有保留字符。
未保留字符:(66个),不需要进行百分号编码
英文字母(a-zA-Z),数字(0-9)和-_.~4个特殊字符。
保留字符:(18个),指那些在URL中具有特定意义的字符
:/?#[]@和!$&'()*+,;=。:/?#[]@: 分隔Url的协议、主机、路径等组件(其中[和]为不安全的保留字符,因此是需要进行百分号编码)。!$&'()*+,;=: 用于在每个组件中起到分隔作用的。
是否需要进行百分号编码是由
编码方式决定,而非保留字符来决定的。
JS中常见编码方式的区别:
-
escape:是非标准的编码方式,主要用于处理字符串,而非URL。
-
escape/unescape加密解码/编码解码,又叫%u编码
-
编码字符串出现有"u",它是unicode编码,Escape编码采用的是UTF-16BE模式。
-
encodeURI:是W3C的标准(RFC 3986),主要用于编码整个URL。
-
encodeURIComponent:是W3C的标准(RFC 3986),主要用于编码URL中的参数。
-
escape/unescape 等同于 escape/unescape。
-
安全字符(69个):*@/+-._0-9a-zA-Z
-
url_encode/url_decode 等同于 encodeURI/decodeURI。
-
安全字符(82个):+-._:/?#[]@!$&'()*+,;=0-9a-zA-Z
-
url_component_encode/url_component_decode 等同于 encodeURIComponent/decodeURIComponent。
-
安全字符(71个):!'()*-._~0-9a-zA-Z