您所拥有的是将实体声明包含在内部子集中的有效方法。但是,该文档在其他方面无效,因为您可以使用W3C 标记验证器进行检查:缺少元素xmlns
上的 required 属性,并且 required属性也是如此。html
title
当作为 text/html 提供时,文档按照浏览器处理 HTML 文档的方式进行处理,这意味着内部子集无法识别;事实上,文档类型定义根本不被读取——相反,文档类型声明只是被视为魔术字符串,因此有些字符串会触发“怪癖模式”,有些则不会。doctype 声明以一种简单的方式解析,这使得第一个“>”终止它,因此它之后的任何内容都被视为字符数据。
士气是实体声明不能在内部或外部与“HTML”一起使用,当“HTML”意味着向浏览器发送某些内容并告诉(在 HTTP 标头中)它是 text/html 时——这就是服务器通常告诉的当他们发送 .html 文件时。
用作 application/xhtml+xml 并固定为符合 XHTML 语法,您的方法适用于符合标准的浏览器(在线演示:http ://www.cs.tut.fi/~jkorpela/test/nbsp.xhtml ):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[<!ENTITY nbsp " ">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Entity demo</title></head>
<body>
<div>Hello World!</div>
</body>
</html>
但是,IE 8 和更早版本在作为 application/xhtml+xml 服务时不处理 HTML(浏览器只会启动“另存为”对话框)。
结论取决于您在做什么以及为什么(以及在何种意义上)您需要“支持 XML 解析器”。这实际上不是关于解析,而是关于实体声明。XHTML 用户代理不需要像 HTML 中那样理解预定义的实体(XML 中定义的实体除外),但是这种可能性是否以某种方式实现了?通常,转换
为实际的不间断空格字符比转换为字符引用要好。