免费工具 HTML 转义 / 反转义(HTML 实体编码解码)
想在网页上展示一段代码而不让浏览器执行它,就要把 < & 这些字符转义;拿到满是 <、"、 的文本,就要反转义回来。解码按 HTML 标准来,连浏览器「将就」的写法也照样处理,并逐条指出来。
- 转义、反转义
- 命名实体全表
- 本地处理,不上传
HTML 转义或反转义
示例是一段要在文章里当代码展示的链接。再点「示例:被转义的统计代码」看看:统计代码粘进富文本编辑器被转义了,所以一直没有执行。
整个框一起转换。
<a href="/pricing?plan=pro&utm_source=公众号">查看「专业版」价格 & 套餐</a>实体数
8
这次转换了多少处。
转换前字符数
61
转换后字符数
91
检查结果
出现的实体
同一个实体只列一次,按出现顺序。
| 实体 | 字符 | 码点 | 次数 |
|---|---|---|---|
< | < | U+003C | 2 |
" | " | U+0022 | 2 |
& | & | U+0026 | 2 |
> | > | U+003E | 2 |
分享这组输入:数值写在链接的 # 后面,不会发到服务器。
https://tapcub.com/zh/tools/html-entity-encoder
版本 v1.0更新于 更新记录
HTML 转义字符各是什么意思
HTML 实体(规范里叫字符引用)是一种写字符的办法:有些字符直接写会被当成标签,有些不好打出来。
必须转义的几个字符
& 是实体的开头,< 是标签的开头,在正文里都必须转义;> 习惯上一起转。放进属性值时,还要转义包着它的那种引号:" 或 '。
命名实体和数字实体
© 这样的命名实体好读;©、© 这样的数字实体什么字符都能写,汉字和 emoji 没有名字,只能用数字。
浏览器的「将就」
&、© 等 106 个老名字不带分号也能解;– 会被读成破折号「–」。检查结果会逐条列出这些情况,方便你改源头。
转义了两次
反转义后还看到 <,说明文本被转义了两次:常见的是编辑器转一次、模板又转一次。再反转义一次,然后找出多出来的那一步。
HTML 正文的转义,和网址、JavaScript 字符串、CSS 里的转义规则都不一样,各用各的。链接里的参数请用 URL 编码工具。
三步
代码放上网页之前转义;需要看懂时反转义。
-
1
选模式
要让代码按文字显示,选「转义」;要读懂满是
&…;的文本,选「反转义」。 -
2
选范围
普通 UTF-8 网页选「只转 & < > 和引号」就够了,中文不需要转。老系统、邮件模板会把中文弄乱时,选十进制或十六进制。
-
3
看检查结果
缺分号、拼错的实体名、重复转义都会带行号列出来,改源头而不是改症状。
常用 HTML 转义字符对照表
HTML 标准一共定义了 2,231 个命名字符引用,其中 106 个出于历史原因不带分号也认。任何字符也都可以用十进制或十六进制码点写。
- 解码取最长匹配:
∉是 ∉,¬it;却是 ¬ 加上「it;」 �、代理区和超过 U+10FFFF 的值都换成 U+FFFD;128–159 按 windows-1252 换成对应字符- 本页按 WHATWG 的值:
⟨是 U+27E8,不是 HTML 4 里的 U+2329 - 属性值里还有一条额外规则(实体名后面紧跟 = 或字母时不解码),本工具不按属性处理
| 字符 | 命名实体 | 十进制 | 十六进制 | 说明 |
|---|---|---|---|---|
| & | & | & | & | 正文里必须转 |
| < | < | < | < | 正文里必须转 |
| > | > | > | > | 习惯上一起转 |
| " | " | " | " | 双引号属性值里要转 |
| ' | ' | ' | ' | HTML 4 没有 ' |
| (不换行空格) | |   |   | 不等于普通空格 |
| © | © | © | © | 不带分号也认 |
| — | — | — | — | |
| 中 | — | 中 | 中 | 汉字没有名字,只能用数字 |
六个容易解错的输入
每一行都用 Python 的 html.unescape(按 HTML5 规则实现)核对过。
| 输入 | 解码结果 | 原因 |
|---|---|---|
&lt; | < | 转义了两次,解一次还剩一层 |
©2026 | ©2026 | 老名字,分号可省 |
¬it; | ¬it; | 最长匹配到的是老名字 not |
– | –(U+2013) | 150 是控制码,按 windows-1252 换算 |
� | �(U+FFFD) | 空字符一律不允许 |
⟨ | ⟨(U+27E8) | HTML5 改了这个实体的值 |
第二到第四行在 HTML 里都算解析错误,只是浏览器悄悄修好了。严格的 XML 解析器会直接报错,所以同一段 HTML 在浏览器里正常,到了 RSS 阅读器或邮件系统里却可能出问题。
HTML 转义常见的坑
多数问题是转得太少、转得太多,或者转错了地方。
把代码粘进富文本编辑器
可视化编辑器会转义你粘贴的内容,<script> 变成 <script>,页面上显示成文字。统计代码、客服代码要粘到「HTML / 自定义代码 / 页头代码」这类地方。
转义了两次
数据库里存的已经是转义后的文本,模板输出时又转一次,读者就会在页面上看到 &。原文存原文,只在输出时转义一次。
以为转义了就不会有 XSS
HTML 转义只保护正文和带引号的属性。放进 href="javascript:…"、<script> 里或不带引号的属性时,转义了也不安全。
把 当普通空格
从网页上复制来的活动名、事件名里夹着不换行空格,看着一样,统计里却是另一行,精确匹配的筛选也对不上。
让统计代码真正跑起来
新装统计后看不到数据,最常见的原因是代码根本没有执行。被转义的 script 标签就是其中一种。
HTML 转义是什么?
把在 HTML 里有特殊含义的字符写成实体,让浏览器按文字显示而不是当标签解析。最常见的是 < 写成 <、& 写成 &、" 写成 "。反过来把实体还原成字符,叫反转义或实体解码。
HTML 转义字符有哪些?哪些必须转?
正文里必须转 & 和 <,> 一般一起转;属性值里还要转包着它的引号。UTF-8 网页里的中文、emoji、带音标的字母都不需要转。完整的命名实体有 2,231 个,常用的见上面的对照表。
' 和 ' 有什么区别?
都是单引号。' 来自 XML,到 HTML5 才进 HTML,很老的解析器不认;' 哪里都认,所以本工具用它。
统计代码为什么在页面上显示成了文字?
它被转义了,通常是富文本编辑器干的,浏览器收到的是 <script> 而不是标签。可以在这里反转义确认,然后把原始代码粘到网站的 HTML、页头代码或自定义代码里,而不是可视化编辑器里。
是什么,为什么会出问题?
是不换行空格(U+00A0),排版上用来防止断行。它和普通空格(U+0020)不是同一个字符,从网页复制到表格、活动名、搜索框里,常常导致「看着一样却匹配不上」。
转义了 HTML 就能防 XSS 吗?
放在 HTML 正文和带引号的属性里时,转义是正确的防护。但放进网址、内联脚本、样式或 onclick 这类属性时不够,各有各的编码规则;更稳妥的是用会按上下文自动转义的模板。
我粘贴的内容会被上传吗?
不会,全部在浏览器里处理。分享链接把文本放在网址 # 后面,浏览器不会把这部分发给服务器,但拿到链接的人都能看到。