分号、双引号、单引号在html中需用实体编码(;、"、')才能安全显示,否则会引发解析错误或xss漏洞;js中应使用字符串转义(\"、\')或textcontent避免风险。

分号 ; 和引号(单引号 '、双引号 ")在 HTML 中有特殊含义,直接写进 HTML 文本里可能被解析为语法结构(比如属性值边界或 JS 字符串分隔符),导致显示异常或 XSS 风险。必须用实体编码才能安全、准确地显示它们。
为什么不能直接写 ;、"、'
HTML 解析器会把 " 和 ' 当作属性值的起始/结束标记;; 虽然本身不触发解析错误,但若出现在 ... 形式的实体中间(如误写成 &#34),会导致实体截断失效。更关键的是:在 JS 字符串或内联事件中直接拼接用户输入的引号,极易引发执行漏洞。
对应实体编码及使用场景
以下编码适用于所有 HTML 环境(包括 <script></script> 内文本、title、alt 等):
- 分号
;→;或;(后者需 DOCTYPE 支持,推荐用数字形式) - 双引号
"→"(最通用)或" - 单引号
'→'(注意不是',该实体在 HTML4 中不被支持,仅 XML 有效)
示例:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
<p>他说:"别忘了加分号;"</p>渲染结果为:他说:"别忘了加分号;"
在 JavaScript 字符串中输出这些字符
JS 本身不解析 HTML 实体,所以不能直接把 " 写进字符串再 innerHTML 插入——那样会原样显示为文字。正确做法是:
- 用 JS 字符串转义:双引号用
\",单引号用\',分号无需转义 - 若需动态插入 HTML 片段,先对内容做 HTML 编码(如用
document.createTextNode().textContent或手动映射) - 避免
innerHTML += '...'+userInput+'...',这会让未编码的引号破坏结构
安全示例:
const text = '他说:"别忘了加分号;"';<br>el.textContent = text; // 自动转义,无风险
容易忽略的细节
很多人以为 ' 可以安全表示单引号,但它在多数 HTML 文档中不被识别,浏览器会显示为字面量 '。必须用 '。另外,UTF-8 页面中直接写中文引号(“”‘’)不会出问题,但它们和 ASCII 引号 "' 是不同字符,不能混用作代码分隔符。










