HTML 实体编码与解码
编码加密所有处理都在浏览器本地完成,数据不上传服务器
把 < > & " 和单引号转成实体,或者反过来把实体还原成字符。编码只动这 5 个 —— 它们是 HTML 里真正有语法含义的字符:决定标签从哪开始、属性值到哪结束。其余字符写成字面量完全合法,一并编掉只会让输出没法阅读、diff 没法对比。解码认得命名实体(收录了网页里最常见的 200 多条)、十进制 中 与十六进制 中 两种数字实体,而且只解一遍:&lt; 会还原成 < 而不会一路解成 < —— 反复解码正是 XSS 的经典产生方式。不认识的实体会原样保留,不报错也不抹掉。
功能
- 双向转换:文本 ⇄ HTML 实体
- 编码只转义 < > & " 与单引号这 5 个有语法含义的字符,其余保持原样
- 可选把非 ASCII 字符编成数字实体:中文 → 中文,emoji → 😀
- 解码支持命名实体(nbsp、copy、mdash、箭头、数学符号、希腊字母等 200 多条)
- 解码支持 中 十进制与 中 十六进制两种数字实体
- 只解码一遍:&lt; 得到 < 而不是 <
- 不认识的实体与越界的码点原样保留,不报错也不吞掉
使用方法
- 选择方向:编码或解码
- 需要连中文一起编成数字实体时,勾上「编码非 ASCII 字符」
- 把内容粘贴进输入框,结果实时出现
- 点「复制」取走结果
常见问题
- 为什么只转义 5 个字符?
- 因为在 HTML 里只有 < > & " 和单引号有语法含义:它们决定标签从哪儿开始、属性值到哪儿结束、实体从哪儿起头。其余字符(包括中文与 emoji)直接写成字面量都是合法的,全编成实体只会让代码无法阅读。需要整段 ASCII 化的场景,勾上「编码非 ASCII 字符」。
- 单引号为什么编成 ' 而不是 '?
- ' 是 XML 与 HTML5 才加入的实体,老解析器不认。数字实体 ' 在任何解析器里都等价于单引号,兼容性更稳。
- 为什么 &lt; 解出来是 <,而不是一个尖括号?
- 本工具只解码一遍,这是安全上正确的做法。反复解码会让 &lt;script&gt; 这类输入穿过只过滤一次的防御,是 XSS 最经典的产生方式。需要嵌套解码时请显式再解一次,并清楚自己在做什么。
- 为什么有的实体没被解出来?
- 本工具收录的是网页里最常见的 200 多条,没有收录 HTML5 完整的 2200 多条(那会让页面体积翻十倍)。遇到没收录的 &foo; 会原样保留 —— 你能一眼看到这里有个没被处理的实体,而不是收到一个报错或者被悄悄抹掉。
相关工具
Unicode 转义
编码加密把中文、emoji 这类非 ASCII 字符转成 \uXXXX、\xXX 或 &#xXXXX; 的转义写法,也能还原回来。全部在浏览器本地完成,不上传。
URL 编解码
编码加密把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 格式化
格式化在线 HTML 格式化与压缩:按标签层级缩进,文本与行内标签保持同一行,script 与 pre 内容原样保留。代码不出浏览器,不上传服务器。
Base64 编解码
编码加密把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
JWT 解析
编码加密把 JWT 拆成 header、payload、signature 三段并格式化,把 iat、exp 等时间声明换算成可读时间。只解析、不验证签名,输出里会写明。全部在浏览器本地完成,不上传。
哈希计算
编码加密算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,中文按 UTF-8 字节计算,结果与 openssl、sha256sum 逐位一致。全部在本地完成,不上传。