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模式。
- escape/unescape加密解码/编码解码,又叫%u编码
-
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
组件接口
url_parser.gs
函数原型 | 函数作用 |
---|---|
string escape(string str, string from_encoding = nil) | 字符串编码转换,等同于js中的escape处理 |
string unescape(string chars, string to_encoding = nil) | 字符串编码转换,等同于js中的unescape处理 |
string url_encode(string url, string from_encoding = nil, string to_encoding = "UTF-8") | URL编码转换,等同于js中的encodeURI处理 |
string url_decode(string chars, string to_encoding = nil, string from_encoding = "UTF-8") | URL解码转换,等同于js中的decodeURI处理 |
string url_component_encode(string url, string from_encoding = nil, string to_encoding = "UTF-8") | URL编码转换,等同于js中的encodeURIComponent处理 |
string url_component_decode(string chars, string to_encoding = nil, string from_encoding = "UTF-8") | URL解码转换,等同于js中的decodeURIComponentI处理 |