编码系列 · 第 3 章
URL 编码与 HTML 实体:%20 和 & 都是什么?
WebTool 团队 · 发布于 2026-09-08 · URL 编码 / HTML 实体 / 前端 / 安全
URL 编码(百分号编码)把「在 URL 里有特殊含义或不安全」的字节转成 %XX;HTML 实体把「在 HTML 里是语法字符」的 < > & " 转成 < 等写法。两者解决的是同一类问题:数据和语法撞车了。 本站提供 URL 编解码 与 HTML 实体转换工具。
URL 里哪些字符要编码
| 字符 | 不编码的后果 | 编码后 |
|---|---|---|
| 空格 | 非法 | %20 |
& |
被当作参数分隔符 | %26 |
= |
被当作键值分隔符 | %3D |
# |
被当作锚点开始 | %23 |
? |
被当作查询串开始 | %3F |
/ |
被当作路径分隔符 | %2F |
| 中文 | 非 ASCII,必须编码 | 中 → %E4%B8%AD(UTF-8 三字节各加一个 %) |
规则一句话:参数值里的保留字符必须编码,参数之间的 & = 不能编码。这正是「参数值里带 & 导致解析错乱」的根因——值没编码。
编码的颗粒度
encodeURIComponent:编码几乎所有保留字符,用于单个参数值。encodeURI:保留:/?#&=,用于整个 URL。- 混用是常见 bug:整串 URL 过一遍
encodeURIComponent会把结构字符全毁掉。
HTML 实体:防注入的基本功
| 字符 | 实体 | 为什么转义 |
|---|---|---|
< |
< |
否则被当成标签开始 |
> |
> |
配对闭合 |
& |
& |
否则被当成实体开始 |
" |
" |
属性值内的引号闭合问题 |
用户输入 <script>alert(1)</script> 若不转义就拼进页面,就是教科书级 XSS。转义后浏览器只把它当文字显示。输出到 HTML 的任何不可信内容都要实体转义,这不是可选优化而是安全底线。
最后更新:2026-09-08