HTML 实体编解码/ & < > "

HTML 特殊字符转义与实体解码,支持命名实体和数字实体,防止 XSS 攻击必备工具。

原始文本
0 字符
HTML 实体
0 字符
常用 HTML 实体
&&
<&lt;
>&gt;
"&quot;
'&#39;
©&copy;
®&reg;
&trade;
&nbsp;
&mdash;
&hellip;
«»&laquo;&raquo;

这个工具有帮到你吗?

什么是 HTML 编解码工具

HTML 编解码工具用于在普通文本和 HTML 实体之间转换。HTML 实体是以 & 开头、以 ; 结尾的特殊编码,用于在网页中安全地显示特殊字符,如 <、>、&、引号等,避免被浏览器误解析为 HTML 标签。

HTML 编解码的常见应用场景

展示代码片段:在博客或文档中显示 HTML/JavaScript 代码时,需要将 < 和 > 编码为 &lt; 和 &gt;。防止 XSS 攻击:用户输入的内容在显示前需要编码,避免恶意脚本执行。邮件模板:在 HTML 邮件中安全显示特殊字符。数据传输:在 JSON 或 XML 中嵌入包含特殊字符的文本。

代码示例

JavaScript (Browser)
// Encode using a temporary DOM element (browser only)
function htmlEncode(str) {
  const div = document.createElement('div');
  div.appendChild(document.createTextNode(str));
  return div.innerHTML;
}

// Decode
function htmlDecode(str) {
  const div = document.createElement('div');
  div.innerHTML = str;
  return div.textContent ?? div.innerText;
}

// Manual encode (works in Node.js too)
const escapeHtml = (s) => s
  .replace(/&/g, '&amp;')
  .replace(/</g, '&lt;')
  .replace(/>/g, '&gt;')
  .replace(/"/g, '&quot;')
  .replace(/'/g, '&#39;');
Python
import html

# Encode (escape)
html.escape('<script>alert("xss")</script>')
# '&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;'

# Encode including single quotes
html.escape("it's", quote=True)
# 'it&#x27;s'

# Decode (unescape)
html.unescape('&lt;b&gt;Hello &amp; World&lt;/b&gt;')
# '<b>Hello & World</b>'
Go
import "html"

// Encode
html.EscapeString("<script>alert('xss')</script>")
// "&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;"

// Decode
html.UnescapeString("&lt;b&gt;Hello &amp; World&lt;/b&gt;")
// "<b>Hello & World</b>"

// In templates (auto-escaped)
import "html/template"
t := template.Must(template.New("").Parse(
    "<p>{{.}}</p>"))
t.Execute(os.Stdout, "<b>Hello</b>")
// <p>&lt;b&gt;Hello&lt;/b&gt;</p>
PHP / Twig
<?php
// Encode
htmlspecialchars('<b>Hello</b> & "World"', ENT_QUOTES, 'UTF-8');
// '&lt;b&gt;Hello&lt;/b&gt; &amp; &quot;World&quot;'

// Decode
htmlspecialchars_decode('&lt;b&gt;Hello&lt;/b&gt;');
// '<b>Hello</b>'

// All HTML entities (including named ones)
htmlentities('© 2025 — Café', ENT_QUOTES, 'UTF-8');
// '&copy; 2025 &mdash; Caf&eacute;'

// Twig (auto-escaped by default)
// {{ user_input }}        ← auto-escaped
// {{ user_input|raw }}    ← raw HTML (unsafe!)

常见问题

为什么需要 HTML 实体编码?
HTML 中某些字符有特殊含义:< 和 > 用于标签,& 用于实体," 用于属性值。如果将用户输入直接插入 HTML,这些字符会被浏览器解析为 HTML 结构,导致 XSS(跨站脚本)漏洞。将它们转义为 &lt;、&gt;、&amp;、&quot; 等实体,浏览器会将其显示为普通文本而不是执行代码。
HTML 命名实体和数字实体有什么区别?
命名实体使用易记的名称,如 &amp;(&)、&copy;(©)、&nbsp;(不换行空格)。数字实体使用字符的 Unicode 码点:十进制格式 &#169; 或十六进制格式 &#xA9;(都表示 ©)。命名实体只存在于 HTML 规范定义的字符,数字实体可以表示任意 Unicode 字符。
哪 5 个字符是 HTML 编码中最重要的?
必须编码的 5 个字符:& → &amp;(必须最先编码,否则会破坏其他实体)、< → &lt;、> → &gt;、" → &quot;(在属性值中)、' → &#39; 或 &apos;(在属性值中)。其余字符(如中文、©、€ 等)不需要编码,现代浏览器完全支持 UTF-8 直接显示。
&nbsp; 是什么?什么时候用它?
&nbsp; 是不换行空格(Non-Breaking Space, U+00A0)。与普通空格的区别:1)浏览器不会在 &nbsp; 处折行;2)多个 &nbsp; 不会被折叠为单个空格(HTML 默认折叠连续空格)。常用于排版中需要固定间距的地方,如数字与单位之间「100&nbsp;km」,或防止特定词组在行末断开。
前端框架(React、Vue)会自动 HTML 编码吗?
是的,React 的 JSX 和 Vue 的模板语法默认会转义所有插值内容。React 中 <div>{userInput}</div> 会自动编码特殊字符;只有使用 dangerouslySetInnerHTML 才会跳过编码(需格外小心)。Vue 中 {{ userInput }} 同样自动转义,只有 v-html 指令会插入原始 HTML。
HTML 编码和 URL 编码有什么区别?
HTML 实体编码(&amp;、&lt; 等)是在 HTML 文档上下文中转义特殊字符,防止 HTML 解析歧义。URL 编码(%26、%3C 等)是在 URL/URI 上下文中转义非 ASCII 和保留字符。二者用途不同,不能混用。在 HTML 属性中的 href 链接:先对值进行 URL 编码,再对整体进行 HTML 实体编码。