因此,在阅读DOM 2 级规范时发现我遇到了以下代码
<!DOCTYPE ex SYSTEM "ex.dtd" [
<!ENTITY foo "foo">
<!ENTITY bar "bar">
<!ENTITY bar "bar2">
<!ENTITY % baz "baz">
]>
<ex/>
虽然我理解为什么在将其粘贴到 html 时它会如此损坏,但为什么它仍然显示]>
但解析出<ex/>
html 中的结束标记?
因此,在阅读DOM 2 级规范时发现我遇到了以下代码
<!DOCTYPE ex SYSTEM "ex.dtd" [
<!ENTITY foo "foo">
<!ENTITY bar "bar">
<!ENTITY bar "bar2">
<!ENTITY % baz "baz">
]>
<ex/>
虽然我理解为什么在将其粘贴到 html 时它会如此损坏,但为什么它仍然显示]>
但解析出<ex/>
html 中的结束标记?
它根本不是 HTML。这是一段相当简单的通用 XML。形式上,“ex.dtd”是指应该包含文档类型定义 (DTD) 的外部资源(例如另一个文件)。
当您将通用 XML 扔给作为 HTML 服务的浏览器时(例如,在 HTTP 标头中指定 Content-Type: text/html),可能会发生有趣的事情。浏览器尝试将其解析为 HTML。
特别是,浏览器不读取 DTD,也不通过正式规范解析文档类型声明(DOCTYPE 声明)——它们只识别一组有限的特定文档类型字符串。他们不认识 [...] 事物,它是一个包含 DTD 的“内部子集”的 XML(和 SGML)构造,即一种通过附加声明(如此处的实体声明)来扩充外部 DTD 的方法。当他们看到“<”时,他们希望 doctype 字符串结束 在第一个 ENTITY 声明中,忽略这些声明,然后将“]>”视为字符数据。