URL 编码/解码

对 URL 进行编码和解码。


URL 无效

Tips

  • 日语字符「あ」经 UTF-8 编码后变为 %E3%81%82
  • 空格在 URL 路径中编码为 %20,在查询参数中有时编码为 +(RFC 3986 与 HTML 表单规范的差异)。
  • ?&=保留字符用于参数值时,必须进行编码。
  • 在 REST API 查询参数中包含非 ASCII 字符,或安全传递重定向 URL 时非常实用。

常见问题

编码是将汉字、空格等非 ASCII 字符转换为 %XX 十六进制格式的过程,解码则是将其还原为原始文本。浏览器地址栏会自动对 URL 进行解码显示。

在 URL 路径部分使用 %20(RFC 3986 标准);在 HTML 表单的 application/x-www-form-urlencoded 查询字符串中使用 +。如无特殊要求,推荐统一使用 %20

字母(A–Z、a–z)、数字(0–9)以及 - _ . ~ 等非保留字符无需编码。&=?#保留字符在作为参数值使用时必须进行编码。
ツールくん

闲话 ― URL 的诞生:Tim Berners-Lee 与万维网的黎明

URL 由 Tim Berners-Lee(万维网的发明者)于 1991 年设计。由于最初仅针对 ASCII 字符,多字节字符(如日语)及特殊字符需通过百分号编码来表示。

互联网第一个网页的 URL「http://info.cern.ch/hypertext/WWW/TheProject.html至今仍可访问。表情符号域名(如 🍕.ws)在技术上可行,内部会被转换为 Punycode(以 xn-- 开头的格式)。URL 在理论上可超过 2,000 个字符,但实际上受浏览器和服务器的限制(约 2,048 个字符)。

RFC 3986 定义了 URL 规范,但 "%20(空格)"与"+(空格)"的区别至今仍是常见混淆点。%20 是 URI 标准,+ 用于 HTML 表单的 application/x-www-form-urlencoded 格式,应根据使用场景加以区分。