跳到正文

HTML 实体编码

HTML Entity Encoder

转义和还原 HTML 实体,输出可选实体名、十进制或十六进制写法。

把字符转成 HTML 实体再转回来——`&`、`&`、`&`——转义多少可选。解码时还会应用 HTML 解析规范要求的 Windows-1252 重映射,所以 `’` 回来的是弯撇号而不是控制字符。

🔒 完全在你的浏览器里运行htmlentityescape
规则
方向
转义

只有 `&`、`<` 和 `>`。放在两个标签之间需要的就这些,多一个也没有。

写法

文本

编码后的值

XML 定义的那五个

XML 预定义的五个实体。
字符实体名十进制十六进制
&&amp;&#38;&#x26;
<&lt;&#60;&#x3C;
>&gt;&#62;&#x3E;
"&quot;&#34;&#x22;
'&apos;&#39;&#x27;

不带 DTD 的话,XML 就只有这五个实体名。XML 文档里其余的都必须写成数字引用。

怎么用

  1. 决定转义多少

    「文本内容」只转义 `&`、`<` 和 `>`——放在两个标签之间需要的全部。「属性值」再加上两种引号。「所有非 ASCII」是给无法承载 UTF-8 的管道用的,中文文本会膨胀到七倍左右。

  2. 选写法

    命名式(`&amp;`)最好读;十进制和十六进制是数字式,在 XML 里也能用——没有 DTD 的 XML 只有五个命名引用。

  3. 或者走另一个方向

    切到「反转义」,粘贴满是实体的文本。表里不认识的实体会列出来并原样保留,而不是被丢掉。

常见问题

为什么我的某个实体被原样留着?

HTML5 定义了 2231 个命名引用,这里的表只收录一个精选子集——全部 Latin-1 字符、标点、希腊字母、箭头和常用数学符号。不在其中的会在一条说明里按名字列出,而不是悄悄丢掉,这是诚实的失败方式。

转义实体能防 XSS 吗?

对文本内容和带引号的属性值,这是正确的转义;在其他任何地方都不够——`<script>` 块内部、`javascript:` URL、不带引号的属性、CSS 上下文,实体转义在这些地方不起任何有用的作用。转义必须和它落地的上下文匹配。

为什么 `&#146;` 解码成撇号?

因为 HTML 解析规范规定,数字引用里 0x80–0x9F 这段码点要重映射为 Windows-1252 在那些位置上的字符。按字面解码会得到不可见的 C1 控制字符,一个天真的解码器处理从 Word 粘来的文本时得到的就是这个。

我能在 XML 里用 `&nbsp;` 吗?

没有声明它的 DTD 就不能。XML 恰好有五个预定义的命名引用——`&amp;` `&lt;` `&gt;` `&quot;` `&apos;`——页面底部的表列出了它们。其他一切都必须用数字式。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。