XHTML仍然有害吗?

3

我要开始一个项目,客户要求使用XHTML 1.0 Strict。现在我想知道Sending XHTML as text/html Considered Harmful中描述的问题是否仍然存在,以及我是否应该试图说服客户这个(非常强烈的)要求是适得其反的。

Internet Explorer现在是否正确处理application/xhtml+xml

4个回答

6
IE9可以处理application/xhtml+xml,包括其中的SVG,这是想要使用此媒体类型的主要原因之一。(否则,迄今为止使用它相对没有太多性能提升,只会得到一堆脚本更改和IE < 9不兼容的问题。)
我不同意Hixie的看法,认为将XHTML作为text/html服务从未真正有害过。使用HTML兼容性指南,XHTML对任何浏览器都没有问题,自古代Netscape 4以来就如此。虽然它在客户端方面并没有真正的好处,但如果您正在使用XML处理工具,则可以帮助您自己的页面处理工作流程。 XML语法规则比HTML更严格但更简单,这是一个好的作者;这使验证器有机会检测到在SGML / HTML中是有效构造但几乎肯定不是您想要的错误。 (另一方面,由于验证器不会强制执行HTML兼容性指南,因此有几个地方可能会让经过良好格式化但麻烦的标记通过,最常见的是自关闭的<script>标记破坏整个页面。)
具体来说,回答他的观点:/>和相关的SGML问题只对那些真正相信HTML是SGML的工具(过去没有任何浏览器)是一个问题。在未来,它特别允许在非XML HTML5中使用。
隐藏脚本/样式表以供“传统”(HTML 3.2之前!)浏览器使用已经不再是一个问题了:我想出了他(正确地)嘲笑为荒谬的混淆评论黑客,但这只是一种练习;我从未打算让任何人除了某些奇怪的假设紧急情况下使用它。当然,在XHTML-as-HTML中使用嵌入式脚本和样式表并不是“必需”的...如果您需要能够包括<&字符,则直接使用//<![CDATA[即可,更常见的情况是您甚至不需要那个。
没有人真正想要嗅探XHTML-as-HTML并对其进行不同处理,因此整个部分都是无意义的。“将XHTML 1.1作为text/html发送永远不好”已被W3C更改(现在是好的),而XHTML 2.0已死亡。
因此,如果您喜欢,请使用XHTML 1.0 Strict、XHTML 1.1或XHTML5。但是,直到IE9成为您的基准浏览器(这不会在短时间内发生),您将不得不坚持使用text/html

1
“将XHTML 1.1作为text/html发送永远不好”的问题非常混乱。XHTML工作组发布了一份说明(仅供参考,非规范文件,并且“未得到W3C成员的认可”),其中表示这样做是可以的,但据我所知,没有任何东西实际上覆盖了IETF RFC关于此问题的规定。 - Quentin
据我了解W3C的流程,如果一个人起草了一份草案,表明“我认为x是个好主意”,但是其他人没有足够的支持来支持它,这样的提议就会失败,而该草案不会被删除,而是以W3C注释的形式结束其生命周期。在允许将XHTML 1.1作为text/html提供的提案中,似乎更多或更少发生了这种情况。 - Alohci
是的,“混乱不堪”是正确的。实际上,当然没有客户端会反对将XHTML 1.1作为“text/html”使用。最初禁止这样做是为了在下一个明确与HTML不兼容的XHTML版本推动Web进入“application/xhtml+xml”。当然,在现实世界中,IE多年未更新,没有人想要XHTML 2.0,这个计划失败了。 - bobince

2

Internet Explorer 9将通过标签混乱解析器处理application/xhtml+xml文档。

Internet Explorer 8及更早版本会提示用户保存文档或在其他应用程序中打开它。

Internet Explorer 6及更高版本都有相当大的市场份额(尽管这在某种程度上取决于您的市场)。

多年来,关于真正的XHTML,浏览器支持方面没有发生重大变化。

除非您实际上在生产链中使用XML解析器(在这种情况下,祝您好运说服它们输出符合HTML兼容性指南的XHTML),否则这仍然会带来更多麻烦而不值得。


你有第一条陈述的参考资料吗?这似乎完全违背了XHTML的目的。 - Michael Borgwardt
1
IE9的application/xhtml+xml解析器并不是一个真正的标签混乱解析器。它会在XML格式错误时窒息和死亡;与其他浏览器的区别在于,它将显示到错误点为止页面到目前为止的内容,而不是用错误消息替换整个页面。遗憾的是(在当前测试版中)没有给出页面被过早终止的视觉指示,但这是一个开始。 - bobince
我可能被误导了。我没有进行太多的研究,因为IE9成为IE的主流版本还需要很多年,所以在很长一段时间内查看application/xhtml+xml没有任何意义。现在,我只使用HTML(尽管如果有人报告错误,我仍会修复Catalyst::View::ContentNegotiation::XHTML中的错误)。 - Quentin
不是真正需要输出HTML兼容的XHTML的XML解析器,而是XML序列化程序。而且这并不是那么难。我做到了,并使用内容协商为不同的用户代理提供不同的内容类型。当然需要一些编程技能,但我可能只用了一个晚上就搞定了。 - Alohci
1
@Alohci:我认为对于大多数作者来说,双媒体类型有点雄心勃勃。对CSS模型进行微调以及对脚本和DOM模型进行重大更改,这些都会使平均水平的人们在用第三方脚本和样式美化他们的页面时遇到困难。而且使用内容协商来实现这一点意味着需要提供Vary头,这会给IE带来很大的缓存问题。对于大多数人来说,考虑到提供application/xhtml+xml的薄弱实际优势,我并不认为值得这样做。 - bobince
显示剩余2条评论

1
这取决于你所说的“Internet Explorer”的意思。
例如,IE6仍然是从2001年左右的版本(这没有变化),不,它仍然无法正确处理。

0

在过去的一年中(2017年5月27日至2018年4月27日),根据netmarketshare,IE 6、7和8的综合份额为1.72%。

其他主要浏览器都支持真正的XHTML(即使用application/xhtml+xml MIME类型发送)。我的回答是“不,它不会有害”。

至于是否有优势,我猜在您真正理解和舒适地使用XML技术(如SVG、MathML等)之前,这并不重要(是的,HTML语法也支持它们,但实际上是一种黑客方式)。

如果浏览器制造商将更多精力投入到XML解析器中,那么对于纯解析速度仍然很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接