HTML 实体转换

Web 工具

编码或解码 HTML 实体,把特殊字符与命名实体互相转换,防止输入被浏览器当作标签执行。支持命名实体、十进制与十六进制三种写法互转,覆盖货币符号与不间断空格。也可只转义尖括号与引号,避免正文里的中文与标点被多余编码。也可只解码不编码。也支持把整段富文本中的标签与符号一次性处理。命名与数字实体可双向互转。

已转义
原始 HTML
44 字符
实体编码
85 字符

关于 HTML 实体转换

HTML 实体编码用于把 <、>、&、" 等具有语法含义的字符转成 &lt;、&gt;、&amp;、&quot; 这样的安全写法,避免浏览器把它们当作标签或属性解析,也能让 © 、€ 等特殊符号在任意编码下稳定显示。本工具支持命名实体、十进制(&#169;)与十六进制(&#xA9;)三种编码形式的相互转换,并能选择只编码必要字符还是全部非 ASCII 字符。整个转换在你的浏览器内完成,输入的文本不会离开本机。所有处理均在浏览器本地完成,无需安装任何软件,它适合在输出用户内容、生成邮件 HTML 或处理含特殊符号的文本时做好转义,防止 XSS 与解析错乱。输出用户内容前记得转义,是防止注入与解析错乱最省事的一步;处理邮件模板时建议统一用命名实体,可读性更好,也便于后续维护。

命名实体与数字实体的区别在于可读性与覆盖范围,选用哪一种取决于场景。命名写法由助记名称构成,人工阅读时一眼能认出含义,但名称集合有限,覆盖不到所有字符;数字写法用编号表示任意字符,覆盖完整但失去可读性。因此在文案类内容里用命名写法便于维护,而在需要覆盖生僻字符时应当使用数字写法。

必须转义的字符只是一个下限,而不是全部规则。尖括号与与号在文本位置必须转义,否则会被解析成标签的开始或实体的开始;引号在属性值里也需要处理,具体取决于使用哪一种引号包裹属性。因此更稳妥的做法是「按位置判断转义规则」,把文本位置、属性值与引用属性分开处理,而不是用一套统一替换。

重复转义是最常见的错误,而它的表现又容易被误认为内容本身如此。对已经转义过的内容再转一次,页面上会显示出实体字符的字面文本,例如本来应当显示为一个符号,结果原样显示出一串字符。因此转义应当只在「写入」这一环执行一次,读取与再次渲染时不要再转,否则每经一次处理就多一层。

实体在不同上下文里的规则并不相同,这一点决定了通用替换容易出错。文本内容、属性值、脚本与样式的内容、以及作为网址的部分,各自需要不同程度的处理;若对统一位置全部套用最严格的替换,反而可能破坏本应保留的结构。因此在处理分段内容时应当按所在上下文选择规则,而不是整段统一处理。

不可见字符与空白类实体是排版细节里容易被忽略的部分。有一种实体表示不换行空格,它不会在渲染时与相邻空白合并,因此常被用于让数字与单位、词与词之间保持不断行;而其他几类宽度空白字符在页面上的表现与普通空格不同。因此在处理排版问题时应先确认是普通空格还是不换行空格,再决定如何替换。

最后,实体的正确解读最终依赖编码声明,缺少它会得到乱码而不是报错。页面若未声明编码,浏览器会按推断规则猜测,同一段实体在不同推断下可能显示为不同字符,且现象不稳定。因此在排查这类问题时,应当先确认源文件的编码与页面声明是否一致,再检查实体本身的写法是否有误。

实现原理

实体是「用一串字符表示另一个字符」的写法:命名实体按名字查表,数字实体按码位表示,十进制与十六进制两种写法等价。解析器在缺少结尾分号时会按最长可识别实体回退,因此 &amp 能渲染成 &,但 &notin 会被读成 &not 加 in——这个回退规则是许多「实体显示不对」问题的根源。

输入&amp; &lt; &#65; &#x41;
输出& < A A(数字实体的十进制与十六进制写法等价;&amp; 显示为 &)

使用方法

  1. 打开「HTML 实体转换」
  2. 输入或粘贴待处理的内容
  3. 根据需要调整输出选项
  4. 点击「运行」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 防 XSS 转义 — 把用户输入中的尖括号与引号转为实体,再插入页面,阻断脚本注入。
  • 代码展示 — 在博客里展示 HTML 源码时编码标签,让浏览器原样显示而不渲染。
  • 邮件模板 — 将版权符、货币符等转为实体,保证不同邮件客户端下显示一致。
  • 解码抓取内容 — 把爬虫抓到的含 &amp;、&#39; 的文本还原成可读的原始字符。
  • 属性值清理 — 为写入 title、alt 等属性的文本编码双引号,避免提前闭合属性。

常见问题

命名实体和数字实体有什么区别?

命名实体如 &copy; 可读性好但依赖 HTML 规范定义的名称表;数字实体 &#169; 和 &#xA9; 直接引用 Unicode 码点,兼容性更广,XML 场景下更安全。

只编码五个特殊字符够吗?

在 HTML 正文中通常只需编码 & < >,属性值里再加上对应的引号即可;但若页面声明的编码不确定,把全部非 ASCII 字符也编码会更稳妥。

转义后还能安全防住 XSS 吗?

实体编码能阻止文本被当作标签,但不同上下文(如 JavaScript、URL、CSS)需要各自的转义方式,单靠 HTML 实体并不足以覆盖所有注入面。

为什么 &nbsp; 解码后看起来像空格却复制不出来?

&nbsp; 是不换行空格(U+00A0),与普通空格(U+0020)码点不同,肉眼相似但在搜索、正则匹配时会被区别对待。

能批量处理整段 HTML 吗?

可以,直接粘贴整段文本即可。若你的目标是把 HTML 转成纯文本,建议改用专门的 HTML 转文本类工具,本工具专注字符级实体编解码。

HTML 实体编码有什么用?

把 <、>、&、引号等保留字符转成 &lt; &gt; &amp; 形式,可避免被浏览器当作标签解析,保证特殊字符在页面上原样显示。

什么时候需要把字符转成 HTML 实体?

在展示代码片段、用户输入内容或含保留字符的文本时必须编码,否则可能破坏布局甚至引入 XSS;解码则用于还原原始字符。

什么时候必须用 HTML 实体?

三类场景绕不开:在 HTML 文本里显示 < > & 这类保留字符;显示键盘上打不出的符号(©、→、不换行空格);防止用户输入被浏览器当标签解析(XSS 防护的第一层)。普通中英文文本不需要转义。

广告