Uvlio

Command Palette

Search for a command to run...

返回文章列表
技术文章

URL 编码解释:百分号编码、查询字符串与安全链接

URL 看起来像普通文本,但很多字符具有结构含义。斜杠分隔路径,问号开始查询,& 分隔参数,# 开始片段。URL 编码,也叫百分号编码,让数据中可以包含原本会被当作结构的字符。多数坏链接来自编码层次错误或完全不编码。
limitcool 维护的 Uvlio 编辑团队2026-05-177 分钟阅读
主题封面开发工具URL 编码解码Base64 编码解码

URL 编码解释:百分号编码、查询字符串与安全链接

解释百分号编码、查询参数、路径片段、表单编码,以及为什么保留字符直接复制会破坏 URL。

文章主题预览
理解原理
检查边界
使用工具
关联工具
URL 编码解码Base64 编码解码
阅读重点
1理解原理
2检查边界
3使用工具

原创流程图

URL 编码解释:百分号编码、查询字符串与安全链接

这张图由 Uvlio 为本文工作流生成,用来说明从输入检查到输出判断的基本路径。
1

理解原理

检查后再进入下一步

2

检查边界

检查后再进入下一步

3

使用工具

检查后再进入下一步

维护与复核
维护者:limitcool。阅读时可重点关注技术原理、处理边界、隐私风险和可验证事实。
URL 有不同组成部分

完整 URL 可以包含 scheme、host、path、query 和 fragment。每一部分规则不同。路径里的斜杠和查询值里的斜杠含义不同。编码应在组件层完成,不应盲目编码或解码整个 URL。

百分号编码表示字节

百分号编码用 % 加两个十六进制数字表示一个字节。空格、非 ASCII 文本和保留字符都可在选择 UTF-8 等编码后表示。查询值里的 & 必须编码,否则会被当成新参数分隔符。

查询字符串需要键值纪律

查询字符串通常由 name=value 组成,并用 & 分隔。键和值都可能需要编码。像 red & blue 这样的值不能直接拼接。使用结构化 API 重建查询字符串比手写字符串拼接更安全,也更能处理重复键和空值。

加号依赖上下文

在 application/x-www-form-urlencoded 中,加号常代表空格;在其他 URL 位置,加号可能就是字面加号。搜索 URL、邮件链接和编码 token 经常因此出错。如果加号本身有意义,应测试真实接收方解析规则。

双重编码会制造奇怪输出

双重编码是把已经编码的值再次编码。百分号会变成 %25,所以 %20 会变成 %2520。接收方解码一次后仍看到编码文本。双重解码也危险,因为它可能把安全外观的字符串变成活跃分隔符。

Fragment 通常不会发给服务器

# 后面的 fragment 由浏览器处理,通常不会随 HTTP 请求发给服务器。调试分析、认证跳转和客户端路由时要注意这一点。如果服务器需要该值,应放在路径或查询里。

安全构建链接流程

先确定要构建的 URL 部分。把原始值和结构分隔符分开,对路径片段或查询值使用组件级编码 API。组装后再解析回来,确认参数与预期一致。用户生成链接还要验证 scheme 和 host。

常见问题

应该编码整个 URL 还是各组件?

通常应编码路径片段、查询值等组件,再组装 URL 结构。

为什么 %20 变成了 %2520?

百分号被再次编码,这是双重编码的典型表现。

URL 编码是安全功能吗?

它能防止语法混淆,但不是完整安全控制,仍需要验证和授权。

查询构建器应该测试什么?

测试空格、&、+、=、非 ASCII、空值、重复键和已含百分号的值。

为什么复制链接在一个应用可用、另一个不可用?

不同应用可能自动解码、重编码、裁剪标点,或不同处理加号和空格。

跳转 URL 放在查询参数里需要编码吗?

需要,但还要验证。编码只保证它作为数据保存,不证明目的地安全。

为什么应使用平台 URL API?

结构化 API 理解组件边界,能减少手写拼接导致的双重编码和分隔符错误。