必须转义<和>,因其在HTML文本节点中被解析为标签边界,直接写入会导致浏览器误解析为HTML标签,引发DOM错乱、XSS漏洞或内容截断。

表格单元格里显示,为什么直接写进去就变成标签了
因为 < 和 > 在 HTML 文本节点中具有语法意义,浏览器会尝试把它们解析成标签边界。哪怕你只是想在 <td> 里显示字符串 "a ,不转义就会被截断或结构错乱。
常见现象:表格某列内容突然消失、后续单元格错位、控制台报 DOM 解析错误。本质不是“表格特殊”,而是所有 HTML 文本节点都遵循同一套解析规则。
- 必须转义的五个字符始终是:
<、>、&、"、' - 用
textContent赋值给<td>最省心——它自动规避解析,且保留原始空格和换行 - 如果用
innerHTML插入,且数据来自后端 JSON,确认该字段没被双重转义(比如服务端已用html.escape(),前端又手动替换一遍)
用 innerHTML 填充表格时,怎么避免 XSS 又不破坏格式
直接拼接字符串到 innerHTML 是高危操作,尤其当表格内容含用户输入时。但有些场景确实需要渲染富文本(如带 <strong> 的摘要),这时不能只靠简单替换。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 优先走白名单过滤:用
DOMPurify.sanitize(htmlString)清洗后再塞进innerHTML,比正则更可靠 - 禁用
<script>、<iframe>、onerror等危险标签和属性,但允许<b>、<em>、<span> - 别对整个表格做
innerHTML = '<tr><td>' + data + '</td></tr>',而应逐单元格创建元素再设textContent或清洗后设innerHTML
后端返回的表格数据已经转义过,前端还该不该再处理
该,而且必须判断上下文。服务端转义(如 Python 的 html.escape())只解决“输出到 HTML 模板”这一环节;一旦数据以 JSON 形式传到前端,就退化为普通字符串,后续如何插入 DOM 才决定是否需二次处理。
立即学习“前端免费学习笔记(深入)”;
- 如果前端用
el.textContent = data.cell→ 完全不需要额外转义,浏览器不会解析 - 如果前端用
el.innerHTML = data.cell→ 若data.cell是服务端已转义的字符串(如<div>),直接插入会导致页面显示 <code><div>字面量,而不是<div>标签 —— 这时得先html.unescape()还原,再视情况决定是否清洗 - 框架如 React 中,
{data.cell}自动转义,等价于textContent;若要用dangerouslySetInnerHTML,则必须确保data.cell是可信且已清洗过的 HTML - 不要用
innerHTML或innerText设置<textarea>的value,它们会触发解析或丢失换行 - 正确做法:用
document.createTextNode(rawHtml)创建文本节点,再取其innerHTML→ 自动转义所有敏感字符 - 简写函数:
function escapeHtmlForTextarea(str) {<br> const el = document.createElement('div');<br> el.textContent = str;<br> return el.innerHTML;<br>} - 注意:
<textarea>本身不解析 HTML,所以最终赋值用textarea.value = escapedStr即可
textarea 里编辑表格原始 HTML,怎么让它原样显示不执行
这是唯一一个你**必须手动转义**的表格相关场景:用户在 <textarea> 里写 HTML 源码,希望看到的是源码本身,而非渲染结果。
显示成字面量,或者 <code><img onload=alert(1)> 真的执行了。


















