URL 保留字符详解
URL 编码指南
URL 规范(RFC 3986)把字符大致分为 保留字符(reserved) 和 非保留字符(unreserved)。了解这一划分,就能清楚什么时候必须编码、什么时候不必编码。
非保留字符(可原样使用)
字母、数字,以及 - _ . ~ 这四个符号可以出现在任何位置而无需编码。对它们编码并不会改变其含义,因此通常保持原样。
保留字符(具有结构含义)
保留字符用于划分 URL 的结构。若要把它们当作字面数据使用,就必须进行编码。
:/?#[]@— 划分地址的主要部分(scheme、path、query、fragment 等)!$&'()*+,;=— 子分隔符,尤其用于查询字符串的键与值
encodeURI 与 encodeURIComponent 的分界
encodeURI 会 保留 上述保留字符,以免破坏一个已经完整的 URL 的结构。而 encodeURIComponent 会把它们 全部转换,这正是插入某个片段(例如单个参数值)时所需要的。
放入单个值时用 encodeURIComponent,处理整个地址时用 encodeURI——只要记住这条原则,就能避免大多数错误。