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