🔣 HTML实体编码/解码器
将文本转换为HTML实体或从实体还原为普通文本
...
什么是HTML实体编码器?
HTML实体编码器是一种将特殊字符转换为HTML实体(HTML Entities)的在线工具。在HTML中,某些字符具有特殊含义:<和>用于标记标签,&用于实体引用,引号用于属性值界定。如果需要在页面中显示这些字符本身,或者在HTML中嵌入包含这些字符的文本内容,就必须使用HTML实体进行转义。例如,<符号需要写成<,&符号需要写成&。此外,许多非ASCII字符(如中文标点、数学符号、emoji等)也可以用实体编码表示。本工具支持编码和解码双向操作,帮助开发者正确处理HTML中的特殊字符。
如何使用HTML实体编码器
- 输入文本 — 填入需要编码的原始文本或需要解码的HTML实体字符串。
- 选择操作 — 选择"编码"将特殊字符转为实体,或"解码"将实体还原为字符。
- 选择编码方式 — 可选择命名实体(<)或数字实体(十进制<或十六进制<)。
常见使用场景
场景一:防止XSS攻击
将用户输入的内容进行HTML实体编码后再插入页面,防止恶意脚本通过注入<script>标签执行。
场景二:代码示例展示
在网页中展示HTML或XML代码片段时,需要将标签符号编码为实体,否则浏览器会将其解析为真正的标签。
场景三:邮件模板开发
HTML邮件中需要显示特殊字符时,使用命名实体确保在不同邮件客户端中正确渲染。
技术原理
HTML实体有三种表示形式:
// 三种HTML实体形式
// 1. 命名实体(最易读)
< → < > → > & → &
" → " ' → '
// 2. 十进制数字实体
< → < > → > & → &
// 3. 十六进制数字实体
< → < > → > & → &
// JavaScript中的编码/解码
function encodeHTML(str) {
return str.replace(/[&<>"']/g, char => {
const entities = {'&':'&','<':'<','>':'>','"':'"',"'":'''};
return entities[char];
});
}
// 解码(安全方式,不直接使用innerHTML)
function decodeHTML(str) {
const textarea = document.createElement('textarea');
textarea.innerHTML = str;
return textarea.value;
}
最佳实践与注意事项
- 在将用户输入插入HTML之前,务必进行实体编码,这是防止XSS攻击的基本措施。
- 在HTML属性值中,引号必须编码("),否则可能破坏属性结构。
- 不要对已经是HTML实体的文本重复编码,否则<会变成&lt;。
- 在现代前端框架(React、Vue)中,默认会对插值内容进行转义,通常不需要手动编码。
常见问题
Q:<和<有什么区别?
A:两者都表示<符号,效果完全相同。<是命名实体,更易于阅读和记忆;<是数字实体,基于ASCII码值。命名实体只有约2000个,数字实体可以表示任何Unicode字符。
Q:什么是XSS攻击?实体编码如何防御?
A:XSS(跨站脚本攻击)通过在网页中注入恶意脚本窃取用户数据。HTML实体编码将<转为<,使浏览器将其显示为文本而非解析为标签,从而阻止脚本执行。
Q:中文需要HTML实体编码吗?
A:不需要。只要页面使用UTF-8编码(meta charset="UTF-8"),中文字符可以直接在HTML中使用。只有有特殊含义的字符(<>&"')才需要编码。
Q:如何在JavaScript中安全地解码HTML实体?
A:不要使用eval或innerHTML直接解码不可信输入。安全方法是创建textarea元素,设置innerHTML,然后读取textContent。或使用DOMParser API。
Q:URL编码和HTML实体编码是一回事吗?
A:不是。URL编码用于URL中的特殊字符(如空格→%20),HTML实体编码用于HTML中的特殊字符(如<→<)。两者目的和编码规则完全不同。