HTML表格单元格内容含<、&等字符未转义时,浏览器会误解析为标签或实体,导致错位、截断或样式丢失;应先对特殊字符进行HTML转义再插入。

表格单元格里出现 就错位?先转义再塞进去
HTML表格本身不特殊,但 td 和 th 里的内容一旦含 、<code>>、&,浏览器会尝试解析成标签或实体,导致单元格内容截断、样式丢失甚至整行错乱。这不是表格的问题,是 HTML 解析器在文本节点中看到未转义的 就立刻切开新标签。
常见错误现象:<tr><td>5 </td></tr> 渲染后只剩 5 ,后面被当成新标签开头;<td>price & stock</td> 可能让 & stock 变成无效实体报错。
- 所有用户输入、API 返回值、数据库读出的内容,填进
td前必须转义 - 只转义五个基础字符:
&、、<code>>、"、',别搞全字符表 - 顺序不能错:必须先转
&,再转和 <code>>,否则<会被二次转成
属性值里的引号怎么处理?title 和 data-* 都要小心
表格列头常带 title 属性提示内容,比如 <th title="User's input: <script>alert(1)</script>">——这里单引号和尖括号都得转。漏掉任意一个,属性就提前闭合,后面脚本真会执行。<p>同理,<code>data-* 自定义属性也一样,浏览器不管它叫什么,只要在属性值里出现未转义的 " 或 ',就会切断解析。
立即学习“前端免费学习笔记(深入)”;
-
title="User's input"→ 必须写成title="User's input"或title="User"s input" -
data-filter="price > 100"→ 必须写成data-filter="price > 100" - 如果用 JS 动态设置,别拼字符串,用
element.setAttribute('title', str),它会自动处理引号(但不会转和 <code>&)
表格里显示代码片段?别只转 ,& 也得跟上
技术文档常用表格对比 HTML/JS 代码,比如一列写 <div class="btn"></div>。这时候只转 和 <code>> 不够——& 在 class 名里虽少见,但在 URL 参数、注释或旧式编码里很常见,比如 src="img.png?w=100&h=80"。漏转 &,整个 & 会被当实体解析,参数崩掉。
更隐蔽的是:某些 CMS 或编辑器导出的表格 HTML,会把 & 错写成 & 再嵌套一次,变成 &,结果页面显示 “&” 而不是 “&”。
- 显示代码时,统一用命名实体:
<div>、、"class" - 避免混用命名和数字编码(如
<和),可读性差且易出错 - 如果从服务端吐出已转义的 HTML 字符串,前端不要再用
innerHTML二次转义,否则变双层编码
空格、版权符、数学符号在表格里怎么稳住?
表格对齐常依赖空格控制,但普通空格会被浏览器合并。版权符 ©、乘号 ×、省略号 … 这些不是“危险字符”,但直接写可能因编码声明缺失而乱码,或在旧环境里不渲染。
最稳妥做法:用实体明确语义,而不是靠 UTF-8 文件编码赌运气。尤其表格数据来自不同系统(比如 Excel 导出、第三方 API),编码不可控。
- 保留空格用
(不换行空格),比如<td>Item Price</td> - 版权、注册商标、货币符号优先用命名实体:
©、®、€ - 数学符号如 ≤、≥、±、÷,用十进制或十六进制更保险:
≤或≤,因为部分命名实体在老浏览器里不支持
真正容易被忽略的点是:转义不是“一次性动作”,而是嵌入位置决定是否需要。同一段字符串,塞进 textContent 安全,塞进 innerHTML 就必须转;塞进属性值里,引号和 & 是重点;塞进纯文本单元格, 和 <code>& 才致命。没想清楚上下文,转了也白转。



















