Zac*_*iaz 5 html php xml xhtml mime-types
只要我记得,我就会努力以正确的方式做事.好吧,无论如何,我认为这是正确的方式.
现在我觉得是时候一劳永逸地回答一些非常重要的问题了.
所有发誓XHTML的人迟早会偶然发现这句话:"除非您提供正确的MIME类型,否则您的文档将被解释为常规HTML"
说什么?我已经创建了一个完美的XHTML文档,遵循所有标准和内容.我做错了什么?我错过了什么?
据我所知,它在很大程度上是服务器的东西,所以当然我也调查过,看起来PHP函数header()就是问题的答案.
是的,那么一切都很好.不,实际上并非如此,因为无论我搜索网络多少,我根本无法找到有关如何解决问题的一致信息,当我找到与远程相关的内容时,这完全取决于浏览器的可比性等等.
让我们尽可能清楚地说.
我不关心浏览器的可计算性.(不管怎么说)
如果我犯了错误,当然我知道如何实现这一点,我真正想要的就是接收XML类型的史诗失败消息.
简而言之,我希望使用SGML方式并采用XML方式,并且我希望能够在没有任何疑问的情况下说这个文档是有效的XML/XHTML并且被解释为这样.
我的想法是,我可以简单地要求有问题的XHTML文档,通过一个PHP脚本,并用适当的MIME类型发送的,但它是如何做实际上仍然是一个谜,由于相互冲突的网络信息.
我希望有人能够提供我正在寻找的答案,最好提供相关信息的链接以备份它.如果你能为我做到这一点,我将永远感激不尽.
最好的祝福.
编辑:我不能说,我明白为什么或者怎么样,但至少我找到了一种方法,使其充当它应该,仅仅通过增加:到正规的XHTML文档的顶部,当然改变文件类型为PHP来实际上让它运行脚本.
我很确定这不是故事的结局,但现在我很高兴.
如果强制/xhtml+xml
标题,则IE将不再解释您的页面.这就是为什么没有人真正麻烦做正确的事.(这就是我在另一个网站上做的原因.)
但是,可以让您的网络服务器处理正确MIME类型的发送.通常你可以让mod_negotiation处理它.但是,这需要每个文档有两个版本:
index.en.html
index.en.xhtml
Run Code Online (Sandbox Code Playgroud)
然后,如果/index
请求了url/resource ,它将自动确定适当的文档版本,并使用正确的媒体类型发送它.但是,它并不真正了解序列化格式的类型差异,也不能设置优先级.并且提取具有相同内容的两个文件并不是一件容易理解的事情.
因此,更简单的方法是使用mod_rewrite来处理MIME类型切换:
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml
RewriteRule .+\.xhtml$ - [T=text/html]
Run Code Online (Sandbox Code Playgroud)
这将为所有.xhtml文档发送已配置的标头,但如果浏览器未指示XHTML支持,则覆盖该标头.这并不完全,因为要避免代理问题,如果您手动执行任何类型的内容协商,还需要设置Vary:标头.这需要mod_header:
RewriteRule .+\.xhtml$ - [E=VARY_XHTML:1]
Header append Vary "Accept" env=VARY_XHTML
Run Code Online (Sandbox Code Playgroud)
您可以使用PHP脚本包装器执行相同操作,但是您将失去使服务器处理它的所有好处.无论哪种方式,这都是相当多的努力,这就是为什么几乎没有人真正做到这一点.但是如果你真的想要XML解析错误,这可能是一个半可行的选择.
归档时间: |
|
查看次数: |
442 次 |
最近记录: |