如何在html文件中替换

时间:2012-12-03 03:33:46

标签: html xml

我想在html文件中用&nbsp;替换所有&#160;以支持XML解析器。 但是我不想直接替换它们,我想在<!DOCTYPE >中添加一个实体,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[<!ENTITY nbsp "&#160;">]> <html><head></head><body><div>Hello&nbsp;World!</div></body></html>

但是当我查看该文件时,文档顶部还有一个额外的]>

任何人都知道如何处理它?<​​/ p>

谢谢!

2 个答案:

答案 0 :(得分:1)

您拥有的是在内部子集中包含实体声明的有效方法。但是,该文档无效,因为您可以使用W3C Markup Validator进行检查:xmlns元素上所需的html属性缺失,所需的title也是如此属性。

当作为text / html提供时,文档被处理如何用于处理HTML文档,这意味着内部子集不被识别;实际上,文档类型定义根本不会被读取 - 相反,doctype声明只被视为魔术字符串,因此某些字符串会触发“怪癖模式”,有些则不会。 doctype声明以一种简单的方式解析,这使得第一个“&gt;”终止它,所以无论它是什么作为字符数据。

士气是当“HTML”意味着向浏览器发送内容并告诉(在HTTP标题中)它是text / html时,实体声明在内部或外部不能与“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 "&#160;">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Entity demo</title></head>
<body>
  <div>Hello&nbsp;World!</div>
</body>
</html>

但是,IE 8及更早版本在作为application / xhtml + xml提供时不会处理HTML(浏览器只是启动“另存为”对话框)。

结论取决于您正在做什么以及为什么(以及在何种意义上)您需要“支持XML解析器”。它不是关于解析而是关于实体声明。 XHTML用户代理不需要像在HTML中那样理解预定义实体(XML中定义的实体除外),但这种可能性是以某种方式实现的吗?通常,最好将&nbsp;转换为实际的不间断空格字符,而不是字符引用。

答案 1 :(得分:0)

这里

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[<!ENTITY nbsp "&#160;">