首页 / 教程文章 / URL 保留字符与不安全字符:为什么必须转义

URL 保留字符与不安全字符:为什么必须转义

发布于 2026-08-20 16:00:00 · 0 阅读 · 标签:URL,百分号编码,保留字符,Web开发

?、&、=、# 在 URL 里有结构含义,空格中文必须编码。讲清保留字符、不安全字符与百分号编码规则,避开接口传参的坑。

一、URL 的结构语法

一个完整 URL:https://tool.aistool.cn/blog/md5?utm=x#comment

这些字符被 URL 语法占用了——数据里如果出现,就必须转义,否则结构会被破坏。

二、两类必须编码的字符

规则:除了字母数字和 -._~,其他都建议编码,最稳妥。

三、百分号编码的规则

编码方式是 % + 两位十六进制,值是字符 UTF-8 字节的十六进制:

解码就是反向过程。注意 % 自己必须写成 %25,否则解码器会把它和后两位错拼成一个字节。

四、常见坑

  1. 参数值带 &:值「a&b」不编码的话服务器会拆成两个参数。
  2. 二次编码%20 被再编码成 %2520,通常因前后端各编码一次。
  3. encodeURIComponent vs encodeURI:前者连 / ? & 一起编码(传参数用),后者保留 URL 结构字符(转整条地址用)。

在线体验

不用装任何环境,直接用本站URL 编解码工具在线操作,数据都在浏览器本地处理,方便又安全。

常见问题

空格编码成 %20 还是 + ?

标准百分号编码是 %20;application/x-www-form-urlencoded 表单规范里空格可用 +。通用场景(路径、REST 参数)用 %20 更安全,+ 在路径中不会被还原成空格。

为什么中文网址有时显示中文有时显示 %E4%BD%A0?

浏览器地址栏为了可读会把百分号编码显示回中文,但实际传输的仍是编码后的形式。开发者工具、日志里看到的就是原始编码串。

URL 有最大长度限制吗?

协议本身没规定,但实现有:浏览器约 2000 字符起,Nginx 默认大 URI 行 8KB。GET 传大参数不靠谱,改用 POST。

更多文章