HTML表格单元格(<td>)里直接写<、>、&会崩布局,因浏览器将其解析为标签或实体,导致DOM结构异常、内容错位或样式失效。

表格里直接写、&会崩布局
HTML表格单元格(<td>)里如果直接写 或 <code>&,浏览器会尝试解析成标签或实体起始符,轻则内容消失,重则整行 <tr> 被截断。这不是样式问题,是解析器提前终止了 DOM 构建。
- 常见现象:某列文字突然变空、后续单元格错位、
</tr>没闭合但页面没报错 - 根本原因:
&最危险——它触发实体解析,<后面若没跟分号,可能被当成不完整标签;"在title="..."属性里漏转,会导致属性值提前结束 - 必须转义的只有五个字符:
&、、<code>>、"、';其他如 ©、®、→ 可用命名或数字实体,但非强制 - 别信“只在表头转、正文不用”——只要进
<td>,就得统一处理
后端吐出的数据已转义,前端再拼接就双重复
比如 Python 用 html.escape() 处理过一次,又在 JS 里用 innerHTML 直接塞进去,结果页面显示的是 而不是 <code>。本质是转义叠了两层。
- 检查来源:数据库字段查出来是
<p>Hello</p>还是?后者说明后端已逃逸过</li> <li>JS 动态渲染时,优先用 <code>textContent
—— 它天然不解析 HTML,安全且避免叠加 - 真要用
innerHTML显示富文本(如带链接的表格内容),先确认数据是否已转义;若已转义,直接赋值;若未转义,必须走escapeHtml()再塞 - React/Vue 用户注意:
{'<div>'} 和 <code>v-html都是“信任此内容”的出口,别把用户输入直接喂进去空格和换行在表格里不生效?试试实体和CSS
表格单元格默认忽略连续空格和换行符,
和是等价的不换行空格,但用多了会让 HTML 膨胀;<br>在<td>里能换行,但语义上它只是个换行符,不是段落分隔。- 多个空格对齐?用
或 CSSwhite-space: pre;(注意会保留所有空白,包括制表符) - 想让长文本自动折行又不断词?加
word-break: break-word;到<td>的 style 或 class -
<br>只适用于简单换行,复杂排版建议用<div>套一层再设 flex/grid - 中文里破折号(—)、省略号(…)建议用数字实体:
—、…,命名实体(如—)在旧 IE 有兼容风险
从数据库读版权符号、欧元符号显示为方块?
显示 © 或 € 却是□,大概率不是实体写错了,而是编码声明或上下文错位。UTF-8 页面里写
©或©都该正常,但如果页面没声明<meta charset="UTF-8">,或者后端返回 HTTP header 的 charset 是 ISO-8859-1,浏览器就会按错误编码解码。立即学习“前端免费学习笔记(深入)”;
- 先看 Network → Response Headers → Content-Type 是否含
charset=utf-8 - 再查 HTML head 里有没有
<meta charset="UTF-8">,且必须是前 1024 字节内 - 编辑器保存文件时选 UTF-8 无 BOM —— 很多 IDE 默认带 BOM,会导致 PHP
header()前输出不可见字符,破坏 charset 声明 - 表格里用
contenteditable编辑时,用户粘贴的 Word 内容常带私有 Unicode 字符(如智能引号),这类字符即使写了“也可能因字体缺失显示为空白或方块
- 多个空格对齐?用



















