URL 编码解码:百分号编码完全指南

二维码 次閱讀

什么是 URL 编码?

URL 编码(URL Encoding),也称百分号编码(Percent-Encoding),是将 URL 中不允许直接出现的字符转换为 %XX 格式的过程,其中 XX 是该字符的 UTF-8 字节的十六进制值。例如:

  • 空格 → %20(或 +
  • &%26
  • =%3D
  • 汉字「你好」→ %E4%BD%A0%E5%A5%BD

为什么需要 URL 编码?

URL 标准(RFC 3986)只允许特定的 ASCII 字符出现在 URL 中。当 URL 中需要包含特殊字符(空格、中文、符号等)时,必须先编码才能正确传输:

  • 保留字符: / ? # [ ] @ ! $ & ' ( ) * + , ; =)在 URL 中有特殊语义,若需作为普通数据使用必须编码
  • 非 ASCII 字符(中文、日文、特殊符号)不在 URL 允许范围内,必须编码
  • 空格不允许直接出现在 URL 中,必须编码为 %20+

encodeURI vs. encodeURIComponent(JavaScript)

函数不编码的字符适用场景
encodeURI()字母、数字、- _ . ! ~ * ' ( ) 及 URL 结构字符(: / ? # @ & = + $ ,编码完整 URL,保留 URL 结构
encodeURIComponent()字母、数字、- _ . ! ~ * ' ( )编码 URL 的某个参数值(如 query string 的值)
// 编码完整 URL(保留 / ? = & 等结构符号)
encodeURI('https://example.com/search?q=你好 world')
// → 'https://example.com/search?q=%E4%BD%A0%E5%A5%BD%20world'

// 编码参数值(连 & = 也一起编码)
encodeURIComponent('你好 & world')
// → '%E4%BD%A0%E5%A5%BD%20%26%20world'

如何在线编解码 URL

使用 tool.tl 的 URL 编码工具

  1. 访问 tool.tl/url-encodertool.tl/url-decoder
  2. 粘贴原始 URL 或编码后的 URL
  3. 即时获得编码/解码结果,一键复制

常见应用场景

  • API 开发:构建含有特殊字符的 query string 参数时,必须对参数值 encodeURIComponent
  • 中文 SEO:中文网址需要编码后传输,但现代浏览器会在地址栏自动显示解码后的中文
  • 表单提交:HTML 表单 GET 提交时,浏览器自动对参数值做 URL 编码
  • 调试日志:解码日志中出现的编码 URL,便于阅读分析

常见问题

%20 和 + 都表示空格,有什么区别?

%20 是 RFC 3986 定义的标准空格编码,适用于 URL 的任何部分。+ 表示空格是 HTML 表单编码(application/x-www-form-urlencoded)中的约定,只在 query string 中有效。API 开发中推荐统一使用 %20

中文域名需要 URL 编码吗?

中文域名(IDN)使用 Punycode 编码而非 URL 编码。例如 中文.com 的 Punycode 编码是 xn--fiq228c.com。URL 编码是针对路径和参数中的中文,不适用于域名部分。

工具是免费的吗?

是的,tool.tl 的 URL 编码/解码工具完全免费,实时处理,无需注册。