HTML转义

⚡ 本地运行🔒 不上传数据🆓 免登录免费

HTML 转义解决的是一个很具体的问题:有些字符在 HTML 里有特殊含义,不能直接写进页面。小于号 < 是标签的开始,大于号 > 是标签的结束,& 是实体引用的开始,双引号和单引号又用来包裹属性值。如果你想在网页上原样显示一段代码,比如 <div>hello</div>,浏览器不会把它当文字,而是会真的去解析成一个 div 元素。转义就是把这些特殊字符换成浏览器能识别的“安全写法”:< 写成 &lt;,> 写成 &gt;,& 写成 &amp;,引号写成 &quot; 和 &#39;。浏览器渲染时会把实体还原成原来的字符显示出来,但不会把它当标签执行。这也是防 XSS 的第一道防线:用户输入的内容如果不转义就拼进页面,攻击者输入 <script> 就能让脚本在别人浏览器里跑起来;转义之后,它只是一段无害的文本。

典型场景有三类。第一,写技术博客或文档时展示代码片段:把 HTML、JS 代码粘进来转义,再贴进 <pre><code> 或富文本编辑器,页面上就能原样显示代码,而不是被浏览器吞掉或执行。第二,前后端联调时拼模板和属性值:把用户昵称、评论、搜索关键词插入 HTML 属性(如 title="...")之前先转义引号和尖括号,避免属性被提前闭合、页面结构被撑破。第三,排查线上乱码和双重转义:接口返回 &amp;lt; 这种双重编码、或者页面上直接显示 &lt; 字样时,用反转义把实体解码回原文,一眼就能看出是哪一层多转或少转了一次。

边界情况要心里有数。转义顺序有讲究:& 必须最先转,如果先转 < 再转 &,刚生成的 &lt; 会被二次转成 &amp;lt;,页面上就会直接显示 &lt; 这四个字符,这就是最常见的双重转义 bug。反过来,解码时也只应解一层:&amp;lt; 解码后是 &lt;,不要连续解码两次变成 <,否则你以为在解码、实际在帮攻击者还原脚本。数字实体有十进制(&#60;)和十六进制(&#x3C;)两种写法,浏览器都认,本工具反转义时两种都支持;命名实体则只覆盖常用集合(&nbsp;、&copy;、&mdash; 等),不认识的实体会原样保留并明确不改动,不会给你一个猜出来的结果。非 ASCII 转义(把中文、emoji 转成 &#x...;)只在老旧系统、邮件 HTML 或严格 ASCII 通道里才需要,现代 UTF-8 页面一般不用开,强行转义只会让文本体积暴涨。

最后提醒安全边界:HTML 转义只防“内容被当成标签或属性执行”这一类问题,它不能替代其他上下文的编码。把内容放进 <script> 里的 JS 字符串、放进 href 的 javascript: URL、放进 CSS 里时,需要的是 JS 转义、URL 编码或 CSS 转义,规则完全不同,不要以为转义过一次就万能。本工具的转义和解码全部在你的浏览器本地完成,没有后端接口,不发起任何网络请求,你贴进来的代码、评论和用户数据不会被上传,敏感片段也可以放心处理。

使用方法

  1. 在输入框粘贴 HTML 代码或普通文本(可点「填入示例」先看效果)
  2. 按需勾选转义引号、转义斜杠、转义非 ASCII 字符,点「转义」得到 HTML 实体
  3. 需要还原时点「反转义」,把 &lt;、&#60;、&#x3C; 等实体解码回原文
  4. 点「复制结果」贴回编辑器、模板或文档;可用「交换输入输出」连续处理

常见问题

HTML 转义和 URL 编码、Base64 有什么区别?

三者解决的问题完全不同。HTML 转义把 < > & 等字符换成 &lt; 这类实体,目的是让内容在 HTML 页面里安全显示、防 XSS;URL 编码(encodeURIComponent)把中文和特殊字符转成 %XX,目的是让字符串能放进网址参数里传输;Base64 是把二进制数据编码成文本,目的是在文本通道里传图片等二进制内容。不要混用:该转义 HTML 时用 URL 编码,页面照样会被标签撑破。

为什么转义后页面上显示的是 &lt; 而不是 < ?

说明发生了双重转义:内容被转义了两次,&lt; 里的 & 又被转成了 &amp;,最终变成 &amp;lt;,浏览器只好把 &lt; 当普通文字显示。排查方法是把结果用本工具反转义一次,看是否恢复正常;代码层面要保证只在最终拼进 HTML 的那一层转义一次,入库和传输环节不要提前转义。

转义引号、转义斜杠、转义非 ASCII 分别什么时候开?

转义引号默认建议开:内容会进 HTML 属性值(如 title="..."、value='...')时,不转义引号会被提前闭合属性,是常见注入点。转义斜杠(/ → &#x2F;)是额外加固,部分老框架或严格过滤场景才需要,一般页面可不开。转义非 ASCII 把中文、emoji 转成数字实体,只有目标系统只支持 ASCII(如老邮件系统、某些网关)时才用,UTF-8 页面开了只会让体积变大、可读性变差。

反转义支持哪些实体格式?

支持三类:命名实体(&lt;、&gt;、&amp;、&quot;、&nbsp;、&copy;、&mdash; 等常用集合)、十进制数字实体(&#60;)和十六进制数字实体(&#x3C;)。解码只进行一层:&amp;lt; 会解成 &lt; 而不会直接变成 <,这是有意的安全行为。不认识的命名实体会原样保留,不会乱猜。

我的代码和文本会被上传吗?

不会。转义和解码是纯字符串替换,全部在你的浏览器本地完成,本页面没有后端接口,不会发送任何网络请求。用户评论、模板代码、带密钥的配置片段都可以放心贴进来处理,关掉页面即不留痕迹。