
当数据库中存储了形如 < 的原始字符串时,浏览器会错误地将其解析为 < 符号。根本原因是 HTML 解析器将 < 识别为未闭合的 < 实体前缀,导致后续渲染异常。解决方法是在输出前将 < 统一转义为 <。
当数据库中存储了形如 `<` 的原始字符串时,浏览器会错误地将其解析为 `<` 符号。根本原因是 HTML 解析器将 `<` 识别为未闭合的 `<` 实体前缀,导致后续渲染异常。解决方法是在输出前将 `<` 统一转义为 `<`。
在 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 解析时机——让 < 作为纯文本呈现,而非触发实体解析。通过服务端预处理实现精准转义,是最稳定、可维护性最强的方案。



















