2011-01-05 46 views
3

我想用PHP DOM實現來操縱HTML和XHTML文檔。我使用DOMDocument-> loadHTML()方法來加載內容。用PHP DOMDocument區分XHTML和HTML

想知道加載的內容是XHTML還是HTML。 DOMDocument有一個doctype對象,它包含文檔本身的DOCTYPE聲明。到目前爲止,我想過比較包含像「 - // W3C // DTD HTML 4.01 // ENtext/html」的$ dom-> doctype-> publicId

有任何人可以想到更好的方法嗎?

編輯:

很抱歉,如果我的問題有點不清楚。我更新了這個問題,因爲它可能令人困惑。但現在要說清楚:這個問題不是關於一般處理HTML DOM與HTML DOM,還是XHTML是好還是壞。

+0

爲什麼不修復源文檔而不是額外增加服務器開銷? – 2011-01-05 23:16:59

+0

你是什麼意思?我從來沒有說過他們壞了。源文檔是用戶提供的所有內容。所以可能會有一個有效的DOCTYPE聲明。它也可能會丟失。其實我只是好奇,如果有人知道另一種或更好的方式來說,如果它是XHTML或HTML比使用DOMDocument-> doctype。 – 2011-01-05 23:21:18

+0

很確定你加載爲html,你應該保存爲html。它應該保持原始文檔類型聲明。您可以使用DOM驗證方法根據文檔類型聲明確定文檔是否有效。如果該代碼無效,您應該讓用戶修復代碼。 – dqhendricks 2011-01-06 01:52:03

回答

1

如果您從外部來源加載,您可以檢查文件的MIME類型,看看它是否是application/xhtml+xml;如果是的話,那肯定是XHTML(當然它可以說謊並且可以用這種類型服務,但是可怕的格式不正確)。否則,如果它是text/html那麼它將被解析爲HTML標籤湯。除了,實際標記的有效性,doctype聲明是判斷內容是否爲HTML或XHTML的下一個最佳方式。

就像你說的,你可以檢查公共標識符和/或URI,並從那裏確定類型。

+0

好的。所以我現在對XHTML的測試是:「strpos(strtolower($ dom-> doctype-> publicId),'xhtml')!== false」。如果情況並非如此,那麼我認爲它是HTML。你怎麼看? – 2011-01-06 12:14:10

+0

@Alex:這聽起來沒問題,因爲瀏覽器通常會以「text/html」方式接收頁面,所以這是一個合理的假設。你可以使用'stripos()'而不是'strpos(strtolower())'。 – BoltClock 2011-01-06 12:16:37

+0

很酷。謝謝 :) – 2011-01-06 12:20:43