URL Encode Online

编码URL中的特殊字符

加载示例

纯文本 / URL

已编码

本地运行 · 粘贴密钥安全无忧
编码输出...
模式:
也可以试试:URL Decode Online

什么是 URL 编码?

URL 编码(又称百分号编码)是一种将信息编码到统一资源标识符(URI)中的机制,确保最终字符串中只出现 RFC 3986 允许的字符。任何不属于非保留字符(A–Z、a–z、0–9、-、_、.、~)的字符,都会被替换为一个百分号加上两位十六进制数字,代表该字符的 UTF-8 字节值——例如,空格变为 %20,& 变为 %26。

百分号编码是必须的,因为 URL 只能包含有限的 ASCII 字符集。当 URL 包含该集合以外的字符——空格、Unicode 字母、用作字面值而非结构分隔符的 &、= 或 / 等符号——这些字符必须经过编码,以防 URL 解析器误解。这对查询字符串的值尤为关键:未编码的 & 或 = 会破坏参数结构。

为什么使用此工具?

即时查看文本在两种模式下的编码结果,并排实时对比——无需编写代码来检验边界情况。

实时预览
输出随输入实时更新。尝试不同的输入,立即查看哪些字符被编码、哪些保持不变。
🔀
双模式
在 encodeURIComponent(用于值)和 encodeURI(用于完整 URL)之间切换,无需离开页面。
🔒
纯客户端
所有编码均在浏览器本地完成。敏感查询参数和令牌永远不会接触服务器。
📋
一键复制
点击一个按钮即可将编码结果复制到剪贴板,可直接粘贴到代码、终端或浏览器地址栏。

如何使用这个在线 URL 编码器

无需账号,无需安装。将文本粘贴或输入到输入框,百分号编码结果即时显示。一切在浏览器中运行——您的数据永远不会离开您的设备。

  1. 1
    粘贴您的文本或 URL
    输入任意字符串——查询参数值、完整 URL、路径段或 JSON 数据。编码器按照 RFC 3986 逐字符处理。
  2. 2
    选择编码模式
    选择 encodeURIComponent 编码单个参数值(编码除非保留字符外的所有字符)。选择 encodeURI 编码完整 URL,同时保留 ://?#&= 等结构字符。
  3. 3
    复制编码输出
    百分号编码字符串即时显示。点击复制获取结果,直接粘贴到 API 调用、表单 action 或配置文件中。
  4. 4
    如需还原,请解码
    操作有误或想验证结果?一键切换到 URL 解码器工具反转编码。

哪些字符会被编码?

RFC 3986 将 URL 字符分为两类:非保留字符(永不编码)和保留字符(具有特殊含义——根据上下文决定是否编码)。下表展示两个 JavaScript 函数对关键字符的处理方式:

字符在 URL 中的含义encodeURIComponentencodeURI
Spaceword separator%20%20
+plus sign%2B%2B
/path separator%2F/ (kept)
?query start%3F? (kept)
#fragment%23# (kept)
&param separator%26& (kept)
=param value%3D= (kept)
@auth separator%40@ (kept)
:scheme / port%3A: (kept)
%percent literal%25%25
~unreserved~ (kept)~ (kept)
-_.~unreserved setkept as-iskept as-is

encodeURIComponent 与 encodeURI

JavaScript 提供了两个行为截然不同的编码函数。选错函数是处理 URL 时最常见的 bug 之一:

encodeURIComponent()
对除非保留字符集(A–Z a–z 0–9 - _ . ~)以外的所有字符进行编码。这是编码单个查询参数值、路径段或任何嵌入 URL 中的值的正确选择。它会对 /、?、#、& 及所有其他保留字符进行编码。
encodeURI()
通过保留保留字符(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)不编码来维持整个 URL 结构。仅在拥有需要保留结构的完整 URL、且只需对其中的非 ASCII 或非法字符进行编码时使用。

常见使用场景

查询字符串参数
在将参数附加到 URL 之前对其值进行编码:使用 name=John%20Doe 而非 name=John Doe。未编码的空格和特殊字符会使 URL 解析器出错,产生意外结果。
构建 API 请求
REST API 需要正确编码的查询参数。使用 encodeURIComponent 对值进行编码,可防止通过值中嵌入的 & 和 = 等字符注入额外参数。
表单数据提交
HTML 表单默认以 application/x-www-form-urlencoded 格式提交数据。理解百分号编码有助于调试浏览器发送的内容和服务器接收的内容。
含特殊字符的路径段
包含空格、斜杠或 Unicode 字符的文件名或标识符,在用作 URL 路径段时必须进行百分号编码:/files/my%20document.pdf。
OAuth 与认证令牌
OAuth 1.0a 和某些身份验证协议要求基础字符串由经过百分号编码的参数名和参数值按严格的规范化算法构建而成。
深度链接与分享 URL
生成嵌入用户内容(搜索查询、筛选状态、坐标)的可分享 URL 时,对所有动态值进行编码,以防止链接失效和通过 URL 操纵产生的 XSS 攻击。

代码示例

在主流语言和环境中对字符串进行 URL 编码的方法:

JavaScript (browser / Node.js)
// Encode a query parameter value (most common case)
encodeURIComponent('hello world & more') // → "hello%20world%20%26%20more"

// Encode a complete URL (preserves ://?#& structure)
encodeURI('https://example.com/path?q=hello world') // → "https://example.com/path?q=hello%20world"

// Build a query string safely
const params = new URLSearchParams({ q: 'hello world', lang: 'en' })
const url = `https://example.com/search?${params}` // uses + for spaces
Python
from urllib.parse import quote, urlencode, quote_plus

# Encode a path segment or query value
quote('hello world & more')          # → 'hello%20world%20%26%20more'

# Encode for application/x-www-form-urlencoded (space → +)
quote_plus('hello world')            # → 'hello+world'

# Build a query string
urlencode({'q': 'hello world', 'lang': 'en'})  # → 'q=hello+world&lang=en'
Node.js (URL API)
const url = new URL('https://example.com/search')
url.searchParams.set('q', 'hello world & more')
url.searchParams.set('lang', 'en')
console.log(url.toString())
// → https://example.com/search?q=hello+world+%26+more&lang=en
CLI (curl / bash)
# curl automatically percent-encodes --data fields
curl -G "https://example.com/search" --data-urlencode "q=hello world & more"

# Manual encoding with Python one-liner
python3 -c "from urllib.parse import quote; print(quote('hello world'))"

URL 编码器 vs. 其他方式

多种工具都能进行百分号编码,但在控制粒度、隐私和使用场景上各有差异。

本工具
基于浏览器,即时,私密。支持 encodeURIComponent 和 encodeURI 两种模式。不向任何服务器发送数据。处理完整 Unicode 输入。
浏览器地址栏
浏览器在粘贴 URL 时会自动编码,但只是部分编码——为了可读性保留了许多特殊字符。不适合用于编码参数值。
URLSearchParams / urllib
在 JavaScript 或 Python 中构建 URL 的正确编程方式。使用本工具进行快速单次编码,或验证代码的输出结果。

常见问题

%20 和 + 表示空格有什么区别?
两者都代表空格,但适用于不同的上下文。%20 是空格的标准百分号编码表示,在 URL 的任何位置都有效。+ 号只在 application/x-www-form-urlencoded 格式(HTML 表单提交)中代表空格。在 URL 路径或原始查询值中,+ 是字面加号,而非空格。使用 %20 可获得最大兼容性。
应该何时使用 encodeURIComponent 而非 encodeURI?
对单个值(查询参数、路径段、哈希片段)使用 encodeURIComponent。encodeURI 仅在拥有完整 URL 且希望保留其结构时使用。常见错误是对查询值使用 encodeURI——这会导致 & 和 = 保持未编码状态,破坏查询字符串。
URL 编码支持 Unicode 字符吗?
支持。非 ASCII 字符首先转换为其 UTF-8 字节表示,然后对每个字节进行百分号编码。例如,欧元符号 €(U+20AC)编码为 %E2%82%AC——其三个 UTF-8 字节。encodeURIComponent 和 encodeURI 在所有现代浏览器中均能正确处理。
重复编码是个问题吗?
是的。如果对已编码的字符串再次编码,%20 会变成 %2520(% 本身被编码为 %25)。始终对原始值进行编码,而非已编码的值。如有疑问,先解码,再重新编码。
哪些字符在 URL 中始终安全?
RFC 3986 定义的非保留字符始终安全,无需编码:大写 A–Z、小写 a–z、数字 0–9、连字符(-)、下划线(_)、句点(.)和波浪号(~)。当其他字符作为值而非结构分隔符使用时,都应进行百分号编码。
为什么有些 URL 包含大写十六进制(%2F),有些是小写(%2f)?
两者均有效。RFC 3986 规定百分号编码序列不区分大小写,因此 %2F 和 %2f 是等价的。但同一规范建议使用大写十六进制数字以保持一致性。大多数浏览器和库生成大写字母。
本工具编码完整 URL 还是只编码参数?
两者均可。使用 encodeURIComponent 模式编码单个查询参数值(最常见的使用场景)。使用 encodeURI 模式编码完整 URL,同时保留 ://、?、# 和 & 等结构字符。
编码是否有长度限制?
没有服务器端限制——工具完全在浏览器中运行。实际限制取决于浏览器的内存。对于非常大的输入或批量处理,请在脚本中使用 encodeURIComponent。