HTML 转义

& < > 等↔实体

416 次访问

HTML 转义 · 反转义

输入0 字符
输出0 字符

常见 HTML 实体对照

字符命名实体数字实体十六进制用途
&&amp;&#38;&#x26;必须首先转义(实体引导符)
<&lt;&#60;&#x3C;标签开始
>&gt;&#62;&#x3E;标签结束
"&quot;&#34;&#x22;属性引号内
'&apos;&#39;&#x27;属性单引号内
 &nbsp;&#160;&#xA0;不间断空格
©&copy;&#169;&#xA9;版权
®&reg;&#174;&#xAE;注册商标
&trade;&#8482;&#x2122;商标

什么时候转义?

· HTML 内容:必转 & < >(三件套)

· HTML 属性值:额外必转 "(双引号)或 '(单引号),取决于包围符

· XSS 防御:用"全字符转义"或服务端模板的 auto-escape(如 Go html/template)

· JS 字符串:用 JSON 转义(\n \t \" \\),本工具的"JS 字符串转义"

· 不要:把已转义文本反复转义(&amp;amp; 是双重转义错误)

关于本工具

了解工具定位 · 使用场景 · 对比优势

使用场景

💻

代码块粘贴

前端开发者在论坛或文档平台粘贴包含 <div>、<script> 等标签的代码片段时,平台会误解析 HTML 导致代码错乱。使用本工具将 < 转成 &lt;、> 转成 &gt;,粘贴后保留原始代码结构,避免被渲染为页面元素,保障代码示例的准确展示。

📧

邮件模板防错

营销人员编写 HTML 邮件模板时,若正文包含 &(如“A&B 公司”),部分邮件客户端会将其误判为 HTML 实体开始符,导致显示为乱码或空白。通过本工具将 & 转义为 &amp;,确保邮件在各客户端中按预期显示品牌名称和链接参数。

🛡️

XSS 预防检查

安全工程师在审计用户输入字段(如评论框、搜索框)时,需要确认特殊字符是否被正确转义。将含有 <script>alert('xss')</script> 的测试字符串输入本工具,观察是否全部转为实体编码,快速验证后端转义逻辑是否生效,降低跨站脚本攻击风险。

📝

Markdown 兼容

技术写作者在 Markdown 文件中嵌入 HTML 标签(如 <details>、<summary>)时,部分渲染器会冲突导致显示异常。先用本工具将标签内的尖括号转义为实体,再混合使用 Markdown 语法,既保留折叠功能又避免渲染冲突,提升文档兼容性。

🔗

URL 参数编码

运维人员在拼接包含 & 的查询参数(如 ?name=Tom&Jerry)时,& 会被解释为参数分隔符,导致参数被截断。使用本工具将 & 转义为 &amp;,再嵌入 URL 中,确保后端正确解析完整参数值,避免接口报错或数据丢失。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (freeformatter.com)传统方法
数据隐私纯浏览器处理,内容不上传服务器部分操作上传服务器处理依赖本地软件或人工,无网络传输风险
处理速度毫秒级实时响应秒级(含网络传输与服务器处理时间)分钟级(需打开软件或手动替换)
离线可用支持,页面加载后完全离线运行不支持,需联网访问支持,依赖本地安装的编辑器或IDE
大小限制仅受浏览器内存限制(通常数MB)通常有字符数限制(如 1MB)仅受本地软件与硬件限制
收费免费,无隐藏费用基础免费,高级功能需付费免费(若使用内置功能)或需购买专业软件
注册无需注册或登录无需注册无需注册
平台任何现代浏览器(桌面/移动端)任何现代浏览器需安装特定软件(如 VS Code, Sublime Text)

使用指南

上手步骤 · 输入输出 · 避坑提示

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
<script>alert('XSS')</script>&lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;典型场景:防止 XSS 注入攻击
a < b && c > da &lt; b &amp;&amp; c &gt; d典型场景:数学表达式中的比较运算符
"Hello" & 'World'&quot;Hello&quot; &amp; &#39;World&#39;典型场景:包含双引号和单引号的文本
© 2024 ®™&copy; 2024 &reg;&trade;边界 case:特殊符号的实体编码
&amp;lt;&amp;amp;lt;边界 case:已编码文本再次转义
a b ca b c边界 case:换行符和制表符不会被转义
100% & 50%100% &amp; 50%易错 case:百分号后的 & 容易被忽略
3 < 5 > 23 &lt; 5 &gt; 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 实体转义(&amp; &lt; &gt;)和 URL 百分号编码(%26)是两套不同规范,互不兼容。工具只做前者。

2. 对已转义过的字符串重复转义

错误
输入 &amp;lt;script&amp;gt;,期望输出 &lt;script&gt;
修复
输入 <script>,工具输出 &lt;script&gt;;若输入已含 &amp;lt; 的字符串,工具会将其中的 & 再转成 &amp;,得到 &amp;amp;lt;

HTML 转义是幂等操作:对已转义内容再转义会多层嵌套,无法还原。应只对原始文本做一次转义。

3. 把数字字符引用(&#NN;)当作未转义内容

错误
输入 &#60;script&#62; 期望工具输出 &lt;script&gt;
修复
输入 <script> 得到 &lt;script&gt;;输入 &#60;script&#62; 工具会将其中的 & 转成 &amp;,得到 &amp;#60;script&amp;#62;

数字字符引用(如 &#60;)本身已是 HTML 实体,工具只转义 & < > " ' 五个原始字符,不会识别或还原已有实体。

4. 忘记转义属性值中的双引号

错误
HTML 属性:<img alt="hello "world"">,只转义 < > 不转 "
修复
完整转义后:<img alt="hello &quot;world&quot;">,或属性值改用单引号:<img alt='hello "world"'>

双引号在 HTML 属性值中会提前闭合属性,导致结构破坏。工具转义 " 为 &quot; 是标准做法。

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>" 用工具转成 "&lt;script&gt;alert('x')&lt;/script&gt;" 后直接放入 <script> 标签
修复
JS 字符串应使用反斜杠转义:"<script>alert('x')</script>" 在 JS 中写为 "<script>alert('x')</script>"

HTML 实体在 <script> 标签内不会被解析为对应字符,浏览器会原样显示 &lt; 字符串。JS 字符串需用 \ 转义引号和换行。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

字符替换:& → &amp; < → &lt; > → &gt; " → &quot; ' → &#39;

变量说明

  • & — 原始字符 &(需转义为 &amp;)
  • < — 原始字符 <(需转义为 &lt;)
  • > — 原始字符 >(需转义为 &gt;)
  • " — 原始双引号(需转义为 &quot;)
  • ' — 原始单引号(需转义为 &#39;)

示例

输入字符串:<script>alert("XSS")</script>。依次替换:< → &lt;,> → &gt;," → &quot;。结果:&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;。

适用范围

适用于 HTML/XML 文档中文本内容的转义,防止标签解析或 XSS 攻击。不适用于 URL 编码(需用 %XX)或 JavaScript 字符串转义(需用 \)。基于 W3C HTML5 规范。

原理图

用户输入原始文本含 & < > "浏览器内转义JS 正则替换& → &amp;展示结果转义后文本可直接嵌入 HTML处理细节• 转义字符对照表:& → &amp; < → &lt; > → &gt; " → &quot;• 所有处理在浏览器本地完成,不发送数据到服务器• 支持批量替换,保留未转义字符原样
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import html

# 转义:特殊字符 → HTML 实体
raw = '<script>alert("xss") & "quotes"</script>'
escaped = html.escape(raw, quote=True)
print(escaped)
# &lt;script&gt;alert(&#x27;xss&#x27;) &amp; &quot;quotes&quot;&lt;/script&gt;

# 反转义:实体 → 原始字符
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)
	// &lt;a href=&#34;test&amp;foo&#34;&gt;click&lt;/a&gt;

	// 反转义
	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);
// &lt;img src=x onerror=alert(1)&gt;

// Node.js 环境:使用内置模块
const { escape, unescape } = require('he');  // npm install he
const escaped = escape(raw);
console.log(escaped);
// &lt;img src=x onerror=alert(1)&gt;

const restored = unescape(escaped);
console.log(restored);
// <img src=x onerror=alert(1)>

常见问题

8 个高频疑问

为什么我输入的 < 变成了 &lt;,但有些地方显示的就是 < 符号?
这是 HTML 转义的正常行为。&lt; 是 < 的实体名称,浏览器在渲染 HTML 时会自动把 &lt; 显示为 <。本工具的作用就是把特殊字符(< > & " ')转成对应的实体编码,防止它们被浏览器误解析为 HTML 标签或属性。如果直接在网页源码里写 <,浏览器会当成标签开始;写成 &lt; 则安全显示为文本。
转义后的字符串可以直接放到 HTML 的什么位置?
转义后的结果可以安全放入 HTML 的文本内容(如 <p>&lt;script&gt;</p>)和属性值(如 <input value="&quot;hello&quot;">)。但注意:如果放入 <style> 或 <script> 标签内部,HTML 转义不适用——需要改用 CSS 或 JavaScript 的转义规则。另外,放入 URL 属性(如 <a href="...">)时还需要 URL 编码,不能只用 HTML 转义。
这个工具支持转义中文或日文吗?为什么转完没变化?
HTML 转义只对 HTML 中有特殊含义的字符生效:< > & " ' 以及部分控制字符。中文字符、日文字符、普通字母数字在 HTML 中不需要转义,所以输入后显示不变是正常的。如果想把中文也转成 &#x4E2D; 这种数字实体(用于某些特殊场景),需要用「HTML 编码」工具而非本转义工具。
转义和反转义有什么区别?我什么时候该用哪个?
转义是把 < > & 等字符变成 &lt; &gt; &amp;(用于在 HTML 中安全显示代码文本);反转义是把 &lt; 变回 <(用于从 HTML 源码中还原原始内容)。典型场景:写博客贴代码片段时用转义;从网页抓取数据、解析 XML 时用反转义。本工具同时提供两个方向,注意看按钮文字确认当前模式。
为什么我转义后看到 &amp;lt; 这种双重转义?是不是工具出错了?
不是工具出错,是输入内容本身已经包含了 &lt; 等实体。例如输入 &lt;,工具会把它当成普通文本,把其中的 & 转成 &amp;,结果变成 &amp;lt;。如果需要处理已经转义过的内容,应该先用「反转义」还原成原始字符,再用「转义」输出。可以用本工具的反转义功能先试一下。
输入的文本有没有长度限制?会不会卡死浏览器?
本工具在浏览器端运行,理论上没有硬性长度限制,但受浏览器内存和 JavaScript 执行时间影响。实测 1 万字符以内瞬间完成;10 万字符大约需要 1-2 秒,浏览器无明显卡顿;100 万字符以上可能会让页面短暂无响应(约 5-10 秒),建议分批处理。如果需要处理超大文件,推荐使用命令行工具或后端 API。
转义结果里的 &#39; 和 &apos; 都表示单引号,哪个更标准?
两者都表示单引号('),但 &apos; 只在 HTML4.01/XHTML 中定义,HTML5 标准中未包含。&#39;(数字实体)在所有 HTML 版本中都可使用,兼容性更好。本工具默认输出 &#39;,如果需要在旧版 XHTML 中使用 &apos;,可以手动替换。注意:双引号也有类似情况,&quot; 和 &#34; 都是标准写法。
我把代码贴进去转义后,换行和空格没变,这样对吗?
对的。HTML 转义只处理特殊字符(< > & " '),不会改变换行符、空格、制表符等空白字符。保留换行和空格是正确的行为,因为 HTML 中的换行和连续空格在渲染时会被合并为单个空格。如果希望保留代码的缩进和换行格式,需要在 HTML 中用 <pre> 标签包裹转义后的内容,或手动将换行替换为 <br>。
选择 打开 +新窗口 esc关闭