URL Decode Online

解码百分号编码的URL

加载示例

已编码URL / 文本

已解码

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

什么是 URL 解码?

URL 解码(百分号解码)是 URL 编码的逆过程:它将百分号编码的序列还原为原始字符。每个百分号后跟两位十六进制数字(%XX)的出现都会被 XX 所代表的字节替换。多个连续的编码字节重新组合,以重建原始的 UTF-8 字符。

URL 解码是开发者在处理 API、网页抓取、日志分析和身份验证流程时的日常任务。编码后的 URL 对机器可读,但对人类不透明——解码后能立即显示实际的路径、搜索查询、重定向目标和参数值,否则需要手动进行十六进制到字符的转换。

为什么使用此工具?

快速理解任何百分号编码的 URL 或查询字符串——无需浏览器控制台,不向服务器发送任何内容。

即时解码
粘贴任意编码的 URL 或参数,立即查看可读版本。非常适合调试 API 请求和日志文件。
🛡️
错误恢复
对包含旧式 Latin-1 百分号编码字符(会导致 decodeURIComponent 失败)的输入,自动回退使用旧版 unescape()。
🔒
纯客户端
所有解码均在浏览器本地执行。令牌、密码和私有查询参数永远不会离开您的设备。
🔁
完整 URL 支持
解码完整 URL 或单个参数值。该工具同时处理标准的 %20 空格,并将 + 保留为字面加号。

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

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

  1. 1
    粘贴您的编码 URL 或字符串
    复制任意百分号编码字符串——来自地址栏的 URL、服务器日志中的查询参数、API 响应或重定向目标——粘贴到输入框中。
  2. 2
    自动格式检测
    解码器自动处理 %XX 百分号编码和 + 作为空格(application/x-www-form-urlencoded)两种情况。无需手动指定编码格式。
  3. 3
    查看解码输出
    可读文本即时显示。如果输入包含嵌套编码(双重编码字符串),解码器每次解析一层。对于格式错误的 %XX 序列将显示错误。
  4. 4
    复制或重新编码
    点击复制获取解码字符串。需要用不同设置重新编码?一键切换到 URL 编码器工具。

解码原理

解码器扫描输入中的 % 序列,将每个两位十六进制组转换为字节值,将连续的字节序列分组,并将其解释为 UTF-8 以生成最终的 Unicode 字符。

示例
输入:https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world
%3A:  %2F/  %3F?  %3D=  %20space
输出:https://example.com/search?q=hello world

百分号编码字符参考表

最常见百分号编码序列的快速参考:

编码形式字符常见场景
%20spacepath segments, query values
%2B+literal plus (not a space in query)
%2F/slash inside a path component
%3F?literal question mark in a value
%23#literal hash in a value
%26&literal ampersand in a value
%3D=literal equals sign in a value
%40@at sign in username / password
%3A:colon inside a path segment
%25%literal percent sign
%2C,comma in path or query
%5B[opening bracket
%5D]closing bracket
%7B{curly brace in template literals
%7D}curly brace in template literals

常见使用场景

调试 API 请求
从浏览器 DevTools 网络日志复制 URL 并解码,查看实际的查询参数值——当自动化工具或库已对参数进行百分号编码时尤为有用。
读取日志文件
Web 服务器访问日志和应用程序日志以编码形式存储 URL。解码后可找到实际请求的路径、搜索词和参数值。
检查重定向
OAuth 回调、SSO 重定向和链接追踪 URL 通常包含大量编码的 redirect_uri 或 next 参数。解码 URL 以追踪目标地址。
解析 Webhook 负载
以 application/x-www-form-urlencoded 发送的 Webhook 请求体(Stripe、Twilio、GitHub)以百分号编码字符串形式到达。解码以读取实际字段值。
提取搜索查询
分析 URL 和 Referer 标头包含以 q= 参数百分号编码的用户原始搜索查询。解码以显示或分析实际搜索词。
逆向解析 URL
在集成第三方 API 或进行网页抓取时,遇到的 URL 通常包含编码的路径段和参数。解码以理解 URL 结构并重现请求。

常见误区

解码百分号编码字符串时最常见的错误:

混淆 + 和 %20
在 application/x-www-form-urlencoded 数据(HTML 表单提交)中,+ 表示空格。但在原始 URL 路径或用 encodeURIComponent 编码的值中,+ 是字面加号。decodeURIComponent 不会将 + 转换为空格——对于表单数据,请使用 URLSearchParams 或 unquote_plus。
双重编码的字符串
如果字符串被编码了两次,解码一次后仍会留下百分号:%2520 解码为 %20,而不是空格。需再次解码才能得到原始值。注意日志、代理和会重新编码已编码数据的中间件中的此类情况。
格式错误的百分号序列
单独的 % 或 % 后跟非十六进制字符(如 %GG 或 % 2)是无效的,会抛出 URIError。始终验证输入或将解码包裹在 try/catch 中。
编码不匹配(Latin-1 与 UTF-8)
旧系统(PHP 的 urlencode、经典 ASP)将字符编码为 Latin-1 字节。以 Latin-1 编码的字符串用 UTF-8 解码器可能无法正确解码。如果看到乱码,请尝试旧版 unescape() 路径,或确认原始编码方式。

代码示例

如何在常用语言和环境中对 URL 字符串进行解码:

JavaScript (browser / Node.js)
// Decode a percent-encoded component
decodeURIComponent('hello%20world%20%26%20more') // → "hello world & more"

// Decode a full URL (leaves structure characters encoded)
decodeURI('https://example.com/path?q=hello%20world') // → "https://example.com/path?q=hello world"

// Parse a query string (handles + as space automatically)
const params = new URLSearchParams('q=hello+world&lang=en')
params.get('q') // → "hello world"
Python
from urllib.parse import unquote, unquote_plus, parse_qs

# Decode percent-encoded string
unquote('hello%20world%20%26%20more')   # → 'hello world & more'

# Decode form-encoded string (+ → space)
unquote_plus('hello+world%21')          # → 'hello world!'

# Parse full query string
parse_qs('q=hello%20world&lang=en')     # → {'q': ['hello world'], 'lang': ['en']}
Node.js (URL API)
const url = new URL('https://example.com/search?q=hello%20world%20%26%20more')
url.searchParams.get('q')  // → "hello world & more"
url.pathname               // → "/search"
CLI (bash)
# Decode with Python one-liner
python3 -c "from urllib.parse import unquote; print(unquote('hello%20world'))"

# Decode with Node.js
node -e "console.log(decodeURIComponent('hello%20world%20%26'))"

URL 解码器 vs. 其他方式

多种工具都能解码百分号编码字符串,但在清晰度、隐私和便利性上各有差异。

本工具
基于浏览器,即时,私密。处理 %XX 编码、+ 作为空格、Unicode 和格式错误的序列。不向任何服务器发送数据。
浏览器地址栏
浏览器会为显示目的解码 URL,但并不总是完全解码——地址栏中仍然可能显示部分编码字符。不适合用于检查单个参数值。
DevTools / curl -v
浏览器 DevTools 和 curl 在网络请求中显示原始和解码后的 URL。便于调试,但需要切换工具并知道去哪里查找。

常见问题

decodeURIComponent 和 decodeURI 有什么区别?
decodeURIComponent 解码所有百分号编码序列,包括保留字符(%2F → /、%3F → ? 等)。decodeURI 只解码不会产生 URL 中具有特殊含义字符的序列——它保留 %2F、%3F、%23 和其他结构性字符的编码状态。对参数值使用 decodeURIComponent;只有在拥有完整 URL 且希望保留其结构时才使用 decodeURI。
为什么会看到 URIError: malformed URI?
当输入包含一个 % 但其后未跟两个有效十六进制数字,或多字节 UTF-8 序列不完整(如 %E2 后缺少 %82%AC)时,decodeURIComponent 会抛出此错误。在解码前,请剥离或转义多余的百分号。
解码是否将 + 处理为空格?
不——decodeURIComponent 将 + 视为字面加号而非空格。+ 转换为空格的约定仅适用于 application/x-www-form-urlencoded 数据(HTML 表单提交)。要解码表单编码数据,请使用 URLSearchParams(浏览器/Node)或 urllib.parse.unquote_plus(Python)。
URL 解码在客户端执行是否安全?
是的——URL 解码是纯粹的转换操作,不涉及任何网络请求。所有现代浏览器都将 decodeURIComponent 和 decodeURI 作为原生函数内置。本工具完全在您的浏览器中执行解码,不向任何地方发送数据。
如何解码经过多次编码的 URL?
多次解码直到输出稳定(不再有新的 % 序列被解析)。当已编码的 URL 再次经过编码器处理时就会出现这种情况。每次解码都会移除一层编码。
%XX 代表什么?
% 后面的两个字符是十六进制数字,代表单个字节值(00–FF)。对于 ASCII 字符,该字节就是字符的 ASCII 码:%41 = 65 = 'A'。对于非 ASCII 字符,多个 %XX 序列代表字符的 UTF-8 字节序列:欧元符号 € 是 %E2%82%AC(三个字节:0xE2、0x82、0xAC)。
浏览器提交 HTML 表单时使用什么编码?
使用 method=GET 的 HTML 表单以 application/x-www-form-urlencoded 编码将字段附加到 URL,空格替换为 + 而非 %20,其他特殊字符进行百分号编码。URL Decode 工具的 + → 空格选项可处理此格式。使用 method=POST 且 enctype=application/x-www-form-urlencoded 的表单在请求体中使用相同的编码方案。
解码是否有大小限制?
没有服务器端限制——工具完全在浏览器中运行。实际限制取决于浏览器的内存。对于非常长的编码字符串或批量处理,请在脚本中使用 decodeURIComponent。