跳到主要内容

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

组件接口

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处理