HTML 转义
& < > 等↔实体
常见 HTML 实体对照
| 字符 | 命名实体 | 数字实体 | 十六进制 | 用途 |
|---|---|---|---|---|
& | & | & | & | 必须首先转义(实体引导符) |
< | < | < | < | 标签开始 |
> | > | > | > | 标签结束 |
" | " | " | " | 属性引号内 |
' | ' | ' | ' | 属性单引号内 |
|   |   | 不间断空格 | |
| © | © | © | © | 版权 |
| ® | ® | ® | ® | 注册商标 |
| ™ | ™ | ™ | ™ | 商标 |
什么时候转义?
· HTML 内容:必转 & < >(三件套)
· HTML 属性值:额外必转 "(双引号)或 '(单引号),取决于包围符
· XSS 防御:用"全字符转义"或服务端模板的 auto-escape(如 Go html/template)
· JS 字符串:用 JSON 转义(\n \t \" \\),本工具的"JS 字符串转义"
· 不要:把已转义文本反复转义(&amp; 是双重转义错误)
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
代码块粘贴
前端开发者在论坛或文档平台粘贴包含 <div>、<script> 等标签的代码片段时,平台会误解析 HTML 导致代码错乱。使用本工具将 < 转成 <、> 转成 >,粘贴后保留原始代码结构,避免被渲染为页面元素,保障代码示例的准确展示。
邮件模板防错
营销人员编写 HTML 邮件模板时,若正文包含 &(如“A&B 公司”),部分邮件客户端会将其误判为 HTML 实体开始符,导致显示为乱码或空白。通过本工具将 & 转义为 &,确保邮件在各客户端中按预期显示品牌名称和链接参数。
XSS 预防检查
安全工程师在审计用户输入字段(如评论框、搜索框)时,需要确认特殊字符是否被正确转义。将含有 <script>alert('xss')</script> 的测试字符串输入本工具,观察是否全部转为实体编码,快速验证后端转义逻辑是否生效,降低跨站脚本攻击风险。
Markdown 兼容
技术写作者在 Markdown 文件中嵌入 HTML 标签(如 <details>、<summary>)时,部分渲染器会冲突导致显示异常。先用本工具将标签内的尖括号转义为实体,再混合使用 Markdown 语法,既保留折叠功能又避免渲染冲突,提升文档兼容性。
URL 参数编码
运维人员在拼接包含 & 的查询参数(如 ?name=Tom&Jerry)时,& 会被解释为参数分隔符,导致参数被截断。使用本工具将 & 转义为 &,再嵌入 URL 中,确保后端正确解析完整参数值,避免接口报错或数据丢失。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A (freeformatter.com) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,内容不上传服务器 | 部分操作上传服务器处理 | 依赖本地软件或人工,无网络传输风险 |
| 处理速度 | 毫秒级实时响应 | 秒级(含网络传输与服务器处理时间) | 分钟级(需打开软件或手动替换) |
| 离线可用 | 支持,页面加载后完全离线运行 | 不支持,需联网访问 | 支持,依赖本地安装的编辑器或IDE |
| 大小限制 | 仅受浏览器内存限制(通常数MB) | 通常有字符数限制(如 1MB) | 仅受本地软件与硬件限制 |
| 收费 | 免费,无隐藏费用 | 基础免费,高级功能需付费 | 免费(若使用内置功能)或需购买专业软件 |
| 注册 | 无需注册或登录 | 无需注册 | 无需注册 |
| 平台 | 任何现代浏览器(桌面/移动端) | 任何现代浏览器 | 需安装特定软件(如 VS Code, Sublime Text) |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例8 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| <script>alert('XSS')</script> | <script>alert('XSS')</script> | 典型场景:防止 XSS 注入攻击 |
| a < b && c > d | a < b && c > d | 典型场景:数学表达式中的比较运算符 |
| "Hello" & 'World' | "Hello" & 'World' | 典型场景:包含双引号和单引号的文本 |
| © 2024 ®™ | © 2024 ®™ | 边界 case:特殊符号的实体编码 |
| &lt; | &amp;lt; | 边界 case:已编码文本再次转义 |
| a b c | a b c | 边界 case:换行符和制表符不会被转义 |
| 100% & 50% | 100% & 50% | 易错 case:百分号后的 & 容易被忽略 |
| 3 < 5 > 2 | 3 < 5 > 2 | 易错 case:连续比较运算符的转义 |
常见错误对照7 个常踩的坑 · 错误 → 修复
1. 把 HTML 转义和 URL 编码混为一谈
输入 <a href="https://example.com?a=1&b=2">链接</a> 后,把 & 转成 %26 再提交直接输入原始 HTML:<a href="https://example.com?a=1&b=2">链接</a>,工具只处理 & < > " ' 这五个字符HTML 实体转义(& < >)和 URL 百分号编码(%26)是两套不同规范,互不兼容。工具只做前者。
2. 对已转义过的字符串重复转义
输入 &lt;script&gt;,期望输出 <script>输入 <script>,工具输出 <script>;若输入已含 &lt; 的字符串,工具会将其中的 & 再转成 &,得到 &amp;lt;HTML 转义是幂等操作:对已转义内容再转义会多层嵌套,无法还原。应只对原始文本做一次转义。
3. 把数字字符引用(&#NN;)当作未转义内容
输入 <script> 期望工具输出 <script>输入 <script> 得到 <script>;输入 <script> 工具会将其中的 & 转成 &,得到 &#60;script&#62;数字字符引用(如 <)本身已是 HTML 实体,工具只转义 & < > " ' 五个原始字符,不会识别或还原已有实体。
4. 忘记转义属性值中的双引号
HTML 属性:<img alt="hello "world"">,只转义 < > 不转 "完整转义后:<img alt="hello "world"">,或属性值改用单引号:<img alt='hello "world"'>双引号在 HTML 属性值中会提前闭合属性,导致结构破坏。工具转义 " 为 " 是标准做法。
5. 把纯文本中的换行符误认为需要转义
输入第一行
第二行,期望输出 第一行<br>第二行工具输出 第一行
第二行(换行符原样保留);若需换行显示,应手动替换为 <br> 或使用 <pre> 标签HTML 转义只处理 & < > " ' 五个字符,不会把换行符转为 <br>。换行在 HTML 中默认视为空白,不会产生新行。
6. 使用工具对 JSON 字符串做 HTML 转义
JSON 内容 {"name": "<script>alert(1)</script>"},直接对整个 JSON 字符串做 HTML 转义仅对 JSON 中作为 HTML 内容输出的字符串值做转义,JSON 结构本身(花括号、冒号、逗号)不做转义JSON 是数据交换格式,不是 HTML。若把整个 JSON 字符串转义,结构符号也会被转成实体,导致 JSON 解析失败。
7. 混淆 HTML 转义与 JavaScript 转义
JS 字符串 "<script>alert('x')</script>" 用工具转成 "<script>alert('x')</script>" 后直接放入 <script> 标签JS 字符串应使用反斜杠转义:"<script>alert('x')</script>" 在 JS 中写为 "<script>alert('x')</script>"HTML 实体在 <script> 标签内不会被解析为对应字符,浏览器会原样显示 < 字符串。JS 字符串需用 \ 转义引号和换行。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
字符替换:& → & < → < > → > " → " ' → '
变量说明
&— 原始字符 &(需转义为 &)<— 原始字符 <(需转义为 <)>— 原始字符 >(需转义为 >)"— 原始双引号(需转义为 ")'— 原始单引号(需转义为 ')
示例
输入字符串:<script>alert("XSS")</script>。依次替换:< → <,> → >," → "。结果:<script>alert("XSS")</script>。
适用范围
适用于 HTML/XML 文档中文本内容的转义,防止标签解析或 XSS 攻击。不适用于 URL 编码(需用 %XX)或 JavaScript 字符串转义(需用 \)。基于 W3C HTML5 规范。
原理图
开发者集成
3 种主流语言 · 复制即用
import html
# 转义:特殊字符 → HTML 实体
raw = '<script>alert("xss") & "quotes"</script>'
escaped = html.escape(raw, quote=True)
print(escaped)
# <script>alert('xss') & "quotes"</script>
# 反转义:实体 → 原始字符
restored = html.unescape(escaped)
print(restored)
# <script>alert('xss') & "quotes"</script>package main
import (
"fmt"
"html"
)
func main() {
raw := `<a href="test&foo">click</a>`
// 转义
escaped := html.EscapeString(raw)
fmt.Println(escaped)
// <a href="test&foo">click</a>
// 反转义
restored := html.UnescapeString(escaped)
fmt.Println(restored)
// <a href="test&foo">click</a>
}// 浏览器环境:自动转义(安全插入 DOM)
const raw = '<img src=x onerror=alert(1)>';
const div = document.createElement('div');
div.textContent = raw; // 自动转义
console.log(div.innerHTML);
// <img src=x onerror=alert(1)>
// Node.js 环境:使用内置模块
const { escape, unescape } = require('he'); // npm install he
const escaped = escape(raw);
console.log(escaped);
// <img src=x onerror=alert(1)>
const restored = unescape(escaped);
console.log(restored);
// <img src=x onerror=alert(1)>常见问题
8 个高频疑问