
当数据库中存储了形如 < 的原始字符串时,浏览器会错误地将其解析为当数据库中存储了形如 `<` 的原始字符串时,浏览器会错误地将其解析为 `
在 Web 开发中,HTML 实体(如
<表示、<code>>表示>)由浏览器自动解析。但若数据库中存入的是不完整或非标准形式的实体片段(例如<、<缺少分号),浏览器仍可能尝试“容错解析”,将其误判为,从而破坏原始文本语义与显示效果。✅ 正确做法:在将数据从数据库读取并嵌入 HTML 页面之前,对内容做预处理——将所有孤立的
<(不区分大小写,且后无分号)替换为安全的<。这样,<会被浏览器解析为字面量<,而非。以下为常见语言中的处理示例:
JavaScript(服务端或客户端渲染前):
function escapeLtInText(text) { return text.replace(/<(?![;])/gi, '<'); } // 示例: console.log(escapeLtInText("Value: < and <")); // → "Value: < and <"PHP(使用 preg_replace):
$text = preg_replace('/<(?![;])/i', '<', $text);Python(Django 模板中建议在视图层处理):
import re cleaned_text = re.sub(r'<(?![;])', '<', raw_text, flags=re.IGNORECASE)⚠️ 注意事项:
- 避免在 HTML 层使用
innerHTML直接插入未经处理的数据库字段;优先使用textContent或模板引擎的自动转义机制(如 Jinja2 的|safe需谨慎)。- 若使用前端框架(React/Vue),确保原始字符串未被双重解析——例如 React 默认对
props和children进行 HTML 转义,此时应直接传入字符串,而非拼接 HTML。- 不推荐全局替换
&为&(会破坏所有合法实体),而应精准匹配<类模式(无分号结尾 + 大小写不敏感)。总结:本质是控制 HTML 解析时机——让
<作为纯文本呈现,而非触发实体解析。通过服务端预处理实现精准转义,是最稳定、可维护性最强的方案。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











