🔣HTML 实体编码解码 - 在线转义 HTML 特殊字符
把文本里的 < > & " ' 转成 < > & " ',放进网页时会原样显示,不会被当成标签;也可以把含实体的 HTML 还原成普通文字。转义范围可以选「五个都转」(放进属性值也安全)或「只转 < > &」(结果更短)。中文、表情等非 ASCII 字符可以保持原样,也可以写成十进制 中、十六进制 中,或者把 ©、€、—、不换行空格这类常见符号写成 © € — 这样的名字。表情按完整字符编码,😀 是 😀,不会被拆成两个无效实体。解码后如果结果里有不换行空格、零宽字符这类看不见的字符,会提示数量并可一键清理。全部在浏览器里完成。
正在加载工具...
如何使用HTML 实体编解码
- 1选择「编码」或「解码」
- 2编码时选好转义范围、非 ASCII 字符的写法,需要的话勾选「有名字的符号用命名实体」
- 3粘贴文本,结果实时出现,点「复制结果」
- 4解码结果里有看不见的字符时,按提示决定要不要换成普通空格
常见问题
- 为什么要转义?哪几个字符必须转?
- 浏览器看到 < 会以为是标签开头,看到 & 会以为是实体开头,所以要在网页里显示「<b>」或「Tom & Jerry」这样的文字,就得写成 <b> 和 Tom & Jerry。放在标签正文里,转 < > & 三个就够;放进属性值(比如 title="…"、alt='…')里,还要转义引号,否则遇到引号属性就提前结束了,页面会错乱,严重时会被插入恶意脚本。不确定用在哪里时,五个都转最稳妥。
- 单引号为什么写成 ' 而不是 '?
- ' 是 XML 里的写法,HTML5 才正式支持,老的 HTML 4 和一些旧邮件客户端不认;' 是数字写法,所有浏览器和邮件客户端都认,所以本工具转义单引号时用 '。解码时两种都能还原。
- 十进制、十六进制、命名实体有什么区别?
- 它们表示的是同一个字符,浏览器显示完全一样。以「中」为例,十进制是 中,十六进制是 中(对应 Unicode 码位 U+4E2D,方便对照),保持原样就是「中」。命名实体只有常见符号才有,比如 © 是 ©、€ 是 €、不换行空格是 ,比数字好认;HTML5 一共定义了两千多个名字,中文汉字没有名字。现在网页几乎都是 UTF-8,中文直接写就行,转成数字实体只在页面编码不确定或要放进纯 ASCII 的环境时才需要。
- 转成数字实体后体积变大多少?
- 按 UTF-8 计算,一个汉字本来占 3 个字节,写成 中 要 8 个字节,大约是 2.7 倍;😀 本来 4 个字节,写成 😀 是 9 个字节。所以除非有必要,中文不建议全部转成实体。
- 表情编码后为什么以前会变成乱码?
- 😀 这类表情在 JavaScript 内部占两个编码单位(代理对)。如果按单位逐个转换,会得到 �� 两个实体,它们单独都不是合法字符,浏览器显示为「��」,内容就丢了。正确做法是按完整字符转换成一个实体 😀(十六进制 😀),本工具就是这样做的,三种写法实测都能还原成原文。
- 解码后提示的「不换行空格」「零宽字符」是什么?
- 解码后是不换行空格(U+00A0),看起来和普通空格一样,但程序里它不等于空格,复制进代码、Excel 或数据库后常导致比较不相等、搜索不到;​ 等零宽字符完全看不见,却会让两段看起来一样的文字对不上;­ 是软连字符,只在换行处才显示。本工具解码后会提示各有几个,点「换成普通空格,去掉看不见的字符」即可清理结果,不会改动你的输入。
- 用在 JavaScript、网址里也是这样转义吗?
- 不是。HTML 实体只管 HTML 正文和属性;放进 JavaScript 字符串要用 \" \n \u4E2D 这类转义,可以用「字符串转义」;放进网址参数要用百分号编码 %E4%B8%AD,用「URL 编解码」;想查某个字符的 Unicode 码位,用「Unicode 编码转换」。在 <script> 里用 HTML 实体是不起作用的。
- 解码会执行里面的脚本吗?
- 不会。解码时内容只当作文字解析,<img src=x onerror=alert(1)> 解码后只是一串文字,不会加载图片,也不会运行代码。
- 文件会上传服务器吗?
- 不会。所有处理都在你的浏览器本地完成,没有任何网络上传,关闭页面即清除。
- 需要注册或付费吗?
- 不需要。本站完全免费,无需注册登录,没有次数限制。
功能特点
- 转义 < > & " ',可选只转 < > &
- 非 ASCII 字符可保持原样,或写成十进制、十六进制数字实体
- 约 50 个常见符号可用命名实体,如 © € —
- 表情等补充平面字符按完整码位编码,不会出现乱码
- 解码支持所有命名实体和数字实体,提示不换行空格、零宽字符、软连字符
- 实时转换,本地运行,不上传