| 字符 | 实体 | 描述 |
|---|---|---|
| < | < | 小于号 |
| > | > | 大于号 |
| & | & | 和号 |
| " | " | 双引号 |
| | 不换行空格 | |
| © | © | 版权符号 |
| ¥ | ¥ | 人民币符号 |
HTML 实体编解码工具,把 &lt; 这类实体和 < 这类原始字符互相转换。写博客贴代码片段、往模板里塞用户输入、调试接口返回的转义字符串时都会用到。比如你从数据库导出评论,看到 &#x4F60;&#x597D; 这种十六进制实体,粘进来点解码就能还原成"你好";反过来,要把 <script>alert(1)</script> 安全地显示在页面上,编码后变成 &lt;script&gt;alert(1)&lt;/script&gt;,浏览器只当文本渲染,不会执行。工具覆盖命名实体(&amp;、&nbsp;、&copy;)、十进制(&#169;)和十六进制(&#xA9;)三种写法,全部在浏览器本地算完,不往服务器发一个字符。
| 对比维度 | 本工具 | 手工/替代做法 |
|---|---|---|
| 处理 1 万字符耗时 | 约 15-40 毫秒,浏览器本地完成 | 手工查找替换,按 200 处计算约 10-20 分钟 |
| 命名实体覆盖 | 2231 个 HTML5 实体全量 | 多数人只记得 &nbsp; &lt; &gt; &amp; 等不到 10 个 |
| 十六进制支持 | 支持 &#x4F60; 形式,大小写 x 均可 | 记事本无法识别,需手算码点再查表 |
| 双重转义判断 | 默认只解一层,与浏览器解析一致 | 容易连点两次解码,把 &lt; 变成 < 引入 XSS |
| 数据流向 | 全程在浏览器内存,关闭页面即清空 | 在线转换站可能把内容 POST 到服务端日志 |
是 U+00A0 不换行空格,不是普通空格 U+0020。两者视觉宽度接近,但 U+00A0 不会在换行处断开,且用 JS 的 trim() 去不掉。解码后如果复制到代码里,建议手动替换成普通空格,否则可能触发 ESLint 的 no-irregular-whitespace 报错。
因为这是双重转义。&amp;lt; 的第一层 &amp; 代表 &,整体代表字符串 <。解码一次得到 <,再解一次才得到 <。工具默认只解一层,这是正确行为——浏览器解析 HTML 也只解一层,多解反而会把用户输入的 &lt; 变成真实标签,造成 XSS。
取决于字符。& 编成 &amp; 是 1 变 5 字节,< 编成 &lt; 是 1 变 4 字节,中文"你"编成 &#x4F60; 是 3 变 8 字节。最坏情况全角标点密集的文本可能膨胀到原体积的 2.7 倍左右。如果只是防 XSS,用 < > & " 四个命名实体即可,不必全量编码。
覆盖 HTML5 规范里的 2231 个命名实体,包括 &copy; &reg; &trade; &mdash; &hellip; &alpha; &beta; &sum; &infin; 等。注意 HTML5 允许省略分号(如 &copy 也能识别),但本工具解码时要求分号结尾,避免把 &copycat 误判成 &copy + cat。
不会。工具只做字符串替换,输出的是纯文本,不写入 DOM 的 innerHTML,也不创建 script 标签。即使输入 &lt;img src=x onerror=alert(1)&gt;,解码后得到的 <img src=x onerror=alert(1)> 也只是显示在输出框里的文字,不会触发任何网络请求或 JS 执行。
适用范围:HTML5 命名实体、十进制 &#NNN; 与十六进制 &#xHHHH; 实体,码点范围 U+0000 到 U+10FFFF。不处理 XML 自定义 DTD 实体,也不解析 URL 编码(那是 %XX,请用 base64 或 char-frequency 类工具)。所有转换在浏览器内存完成,不上传、不落盘、不写 cookie,关闭标签页数据即消失。