0

因此,在阅读DOM 2 级规范时发现我遇到了以下代码

<!DOCTYPE ex SYSTEM "ex.dtd" [
  <!ENTITY foo "foo">
  <!ENTITY bar "bar">
  <!ENTITY bar "bar2">
  <!ENTITY % baz "baz">
]>
<ex/>

虽然我理解为什么在将其粘贴到 html 时它会如此损坏,但为什么它仍然显示]>但解析出<ex/>html 中的结束标记?

4

1 回答 1

2

它根本不是 HTML。这是一段相当简单的通用 XML。形式上,“ex.dtd”是指应该包含文档类型定义 (DTD) 的外部资源(例如另一个文件)。

当您将通用 XML 扔给作为 HTML 服务的浏览器时(例如,在 HTTP 标头中指定 Content-Type: text/html),可能会发生有趣的事情。浏览器尝试将其解析为 HTML。

特别是,浏览器不读取 DTD,也不通过正式规范解析文档类型声明(DOCTYPE 声明)——它们只识别一组有限的特定文档类型字符串。他们不认识 [...] 事物,它是一个包含 DTD 的“内部子集”的 XML(和 SGML)构造,即一种通过附加声明(如此处的实体声明)来扩充外部 DTD 的方法。当他们看到“<”时,他们希望 doctype 字符串结束 在第一个 ENTITY 声明中,忽略这些声明,然后将“]>”视为字符数据。

于 2013-03-23T05:37:02.533 回答