2011-05-15 51 views
4

只要我记得,我已经尽了很大的努力以正确的方式做事。那么,我认为正确的方式是无论如何。为您的XHTML提供正确的MIME类型

现在我觉得是时候回答一些非常重要的问题了。

所有谁发誓XHTML会,迟早,偶然发现的名言:“除非你发球权的MIME类型,您记录将被解释为普通的HTML”

你说什么?遵循所有标准和内容,我创建了完美的XHTML文档。我做错了什么?我错过了什么?

据我所知,它大部分是服务器的东西,所以当然我也调查过,看起来PHP函数header()是问题的答案。

耶,那么一切都很好。呃,不,实际上不是,因为无论我在网上搜索多少,我都无法找到关于如何解决这个问题的一致信息,当我找到远程相关的东西时,就是关于浏览器的可比性等等。

让它尽可能清楚地说。

我很在乎浏览器的可计算性。 (无论如何也不在这里)

如果我犯了一个错误,当然还有关于如何实现这一点的知识,我真正想要的就是收到XML类型的史诗般的失败消息。

简而言之,我想要使用SGML方式并采用XML方式,并且我希望能够毫无疑问地说这个文档是有效的XML/XHTML,并且被解释为这样。

我的想法是,我可以简单地通过一个PHP脚本来请求有问题的XHTML文档,并将它发送给一个适当的MIME类型,但是由于网络上的信息冲突,它究竟如何实现仍然是个谜。

我确实希望有人能够提供我正在寻找的答案,最好是链接到相关信息以备份它。如果你能为我做到这一点,我将永远感激。

此致敬礼。

编辑: 我不能说,我明白为什么或者怎么样,但至少我找到了一种方法,使其充当它应该简单地通过增加: 到正规的XHTML文档的顶部,的课程将文件类型更改为PHP以实际使其运行脚本。

我很确定这不是故事的结尾,但现在我很高兴。

+0

*(相关)* [什么是与一个XHTML内容类型服务的网页有关的问题(http://stackoverflow.com/questions/351380/xhtml-what-are-the-problems-associated-with-服务页面与内容应用程序) – Gordon 2011-05-15 15:19:14

+0

*(相关)* [XHTML仍然有害?](http://stackoverflow.com/questions/4368497/xhtml-still-harmful) – Gordon 2011-05-15 15:19:52

+0

我不知道有一个问题在这。你说你是不是担心浏览器的兼容性,但它是决定如何解析文档,什么MIME类型变化如何解析文档浏览器。此外,它通常取决于您正在使用的Web服务器来确定数据的MIME类型(除非您通过PHP手动设置头)。 – Kitson 2011-05-15 15:20:40

回答

5

如果您强制/xhtml+xml标题,那么IE不会再解释您的页面。这就是为什么没有人真正困扰做正确的。 (也是我在另一个网站上做的原因。)

但是,可以让您的网络服务器处理发送正确的MIME类型。通常你可以让mod_negotiation来处理。然而,需要让每个文档的两个版本:

index.en.html 
index.en.xhtml 

然后如果URL /资源/index被请求时,它会自动确定适当的文件版本,并与正确的媒体类型发送。但是,它并不真正了解序列化格式的类型差异,您也不能设置优先级。并且提供具有相同内容的两个文件在开始时不太明显。

因此更简单的办法是使用mod_rewrite来处理MIME类型切换:

RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml 
RewriteRule .+\.xhtml$ - [T=text/html] 

这将发送配置的标题为所有.xhtml文件,但覆盖,如果浏览器不表示支持XHTML 。这并不完全,因为为了避免代理问题,如果您手动进行任何类型的内容协商,还需要设置Vary:标头。这需要mod_header:

RewriteRule .+\.xhtml$ - [E=VARY_XHTML:1] 
Header append Vary "Accept" env=VARY_XHTML 

你可以做一个PHP脚本包装相同,但你失去了具有服务器处理它的所有好处。无论哪种方式,这是相当费力的,这就是为什么几乎没有人真的这样做。但是如果你真的想要XML解析错误,这可能是一个半可行的选项。

+0

也很感兴趣:http://httpd.apache.org/docs/2.0/content-negotiation.html – Gordon 2011-05-15 16:14:10

+0

当然,在做出如此大胆的陈述之前,我必须先进行检查,因此延迟回复,但似乎是这样IE9不会遇到这个问题,如果人们不能为升级而烦恼,他们可能对我不得不说的东西感兴趣,所以问题就解决了。如果能够告诉人们为了查看我的网站他们需要做什么,但是我认为这仍然是可能的,这将是很好的。无论如何谢谢你的回答。 – Zacariaz 2011-05-15 16:36:19

+0

当然IE9实际上并不把它当作XML/XHTML,但我可以忍受。 – Zacariaz 2011-05-15 16:43:04

2

为了得到一个浏览器解析器使用XML解析器解析XHTML,它必须与XML Mime Type

HTML5送达定义此为:

术语XML MIME类型用于 指的MIME类型文本/ XML, 应用/ XML,任何MIME类型 ,其亚型与四个 字符结束“+ xml”的。 [RFC3023]

最常见的这种MIME类型application/xhtml+xml,但它远远不是唯一可能之一。

+0

有趣。所以通过使用例如文本/ XML你也可以诱使IE浏览器符合XHTML? (发现一些'<?xml-stylesheet解决方法) – mario 2011-05-15 17:28:19

+0

@mario - IE版本9之前的版本只是不解释XHTML,并且没有什么可以做的。但它确实有一个XML解析器,它将采用XML输入并将xslt样式表应用于它。我相信它所做的就是将* that *的输出,并将其重新解析为普通的HTML。 – Alohci 2011-05-15 17:34:47

+0

这就是我的想法。这样的[XSL样式表](http://www.echoofeden.com/digest/mit/2007/03/06/ie-xhtml-bug/)只是将任何/ xml文档转换为HTML。所以没有实际的XHTML解析规则,也没有XML DOM。但至少可以实现OP所需的内容:在显示之前验证xml的正确性。 – mario 2011-05-15 17:41:59

相关问题