alltools.one
Web Development
2026-02-12
7 min
alltools.one Team
urlencodingweb-developmenthttpapi

URL 编码指南:为什么以及如何编码 URL

你是否想过为什么 URL 中的空格会变成 %20,而 & 符号会变成 %26?URL 编码(也称为百分号编码)将 URL 中不安全的字符转换为 Web 服务器可以理解的格式。

为什么 URL 编码很重要

URL 只能包含有限的 ASCII 字符集。特殊字符、空格和非 ASCII 文本需要编码才能安全传输。如果不编码,URL 会以不可预测的方式中断 — 空格可能截断 URL,& 符号可能被误认为参数分隔符。

试试我们的 URL 编码器/解码器,看看任何文本在进行 URL 编码后会如何转换。

哪些字符需要编码?

安全字符(无需编码)

字母(A-Z、a-z)、数字(0-9)以及这些符号:-_.~

保留字符(用作数据时需要编码)

字符编码后在 URL 中的用途
:%3A协议分隔符
/%2F路径分隔符
?%3F查询字符串起始
#%23片段标识符
&%26参数分隔符
=%3D键值分隔符
+%2B通常表示空格
@%40用户信息分隔符
%%25编码指示符

始终需要编码

空格(%20)、非 ASCII 字符(UTF-8 字节编码)以及安全集之外的任何字符。

URL 编码实践

查询参数

最常见的用例。构建搜索 URL 或 API 请求时:

https://api.example.com/search?q=hello%20world&lang=en

表单数据

使用 method="GET" 的 HTML 表单会自动对字段值进行 URL 编码。在表单编码中,空格变为 +(与百分号编码略有不同)。

路径段

URL 路径中的文件名和资源标识符也需要编码。名为 my report.pdf 的文件在 URL 中变为 my%20report.pdf

不同语言中的编码

JavaScript:

encodeURIComponent('hello world & more')
// "hello%20world%20%26%20more"

decodeURIComponent('hello%20world')
// "hello world"

Python:

from urllib.parse import quote, unquote
quote('hello world & more')
# 'hello%20world%20%26%20more'

常见错误

  1. 双重编码 — 对已编码的 URL 进行编码会将 %20 变成 %2520
  2. 使用 encodeURI 而不是 encodeURIComponentencodeURI 跳过在查询值中很重要的保留字符
  3. 未编码 + — 在 URL 中,+ 可能表示空格。将字面量加号编码为 %2B
  4. 忘记非 ASCII 字符 — Unicode 字符需要先进行 UTF-8 编码,然后再进行百分号编码

常见问题

encodeURI 和 encodeURIComponent 有什么区别?

encodeURI 编码完整的 URL,跳过 :/?# 等字符。encodeURIComponent 编码除未保留字符之外的所有内容 — 用于单个查询参数值。

为什么空格有时变成 + 有时变成 %20?

表单编码(application/x-www-form-urlencoded)使用 + 表示空格。标准百分号编码使用 %20。两者在不同上下文中都是有效的。

相关资源

Published on 2026-02-12
URL Encoding Guide: Why and How to Encode URLs | alltools.one