2010-01-04 44 views
0

我解析的HTML文件包含一些ASCII控制代碼。我注意到,PHP的DOM文檔分析器截斷時,發現在節點內ASCII控制字符的文本節點,如如何讓DOMDocument對ASCII控制字符更好?

Device Control 0x13

End of Medium 0x19

File Separator 0x1C

Group Separator 0x1D

是這是一個錯誤還是一個功能?有什麼辦法讓DOMDocument採取其他行動嗎?我在DOM處理之前使用了這些字符,但我想知道這是否是正確的解決方案。

+0

我看到你接受我的回答,是你可以配置解析器作爲1.1?或者你是否使用了前置1.1序言的解決方法?或者有些不同?如果您可以顯示一些示例代碼,那麼對於有相同問題的其他人也會有所幫助。 – kdgregory 2010-01-04 19:41:16

回答

2

可能是一個錯誤和一個功能。

XML 1.0是very restrictive關於它將接受的ASCII控制字符。所以看起來你的DOMDocument試圖通過截斷來保護你免受自己的傷害(儘管它應該返回一些問題的表示,所以我會稱之爲錯誤)。

XML 1.1是less restrictive;唯一不允許的是NUL。所以,一種可能的解決方案是配置您的DOMDocument對象,以便它知道它應該管理1.1。


編輯:looks like您可以將XML版本號傳遞給DOM文檔構造(但我不是一個PHP程序員,所以不知道如果我正確地閱讀文檔)。


編輯2:我剛剛重讀你的問題,並意識到你的解析,而不是構造。如果你預先輸入一個有效的1.1序言,那應該是一個解決方法。或者,也許通過構建具有正確版本號的DOMDocument,它將在沒有該序言的情況下正確解析。

+0

即使在XML 1.1中,列出的字符也是RestrictedChar,因此必須將其編碼爲字符引用,而不是按原樣包含! – bobince 2010-01-04 17:51:06

+0

我不確定這是否正確。我假設你正在查看'document'產生,它包含'(Char * RestrictedChar Char *)'。然而,如果你按照鏈接,你會看到'Char'和'RestrictedChar'重疊,並且沒有提到要求'RestrictedChar'被編碼爲一個實體(至少我能找到) - 它們是隻是被認定爲「灰心喪氣」。 – kdgregory 2010-01-04 18:17:03

+0

這是'(Char * RestrictedChar Char *)'前面的'-',這意味着文檔中的任何地方都不能有RestrictedChar。的確,我這裏的XML解析器都不會觸及這樣的文檔。 – bobince 2010-01-04 20:16:01

1

要增加kdgregory關於可允許字符的說法,這些控制字符不僅在XML中無效,而且在SGML中也是如此。因此,傳統的HTML或XHTML,你永遠無法解析HTML文檔中的任何字符。

(我不知道爲什麼你會想。二進制數據不屬於[X] [HT] ML)

+0

謝謝。無論如何,我不想添加這些角色!我正在解析其他人撰寫的Web文檔。這些字符可能是從另一個應用程序(Microsoft?)直接粘貼到Web編輯器或類似的東西。 – Sleepster 2010-01-04 18:04:11

相關問題