2011-05-15 75 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

相關問題