如何让DOMDocument对ASCII控制字符很好?

时间:2010-01-04 17:22:30

标签: php html xml utf-8 domdocument

我正在解析的HTML文档包含一些ASCII控制代码。我注意到PHP的DOMDocument解析器在节点中找到ASCII控制字符时会截断文本节点,例如

  

Device Control 0x13

     

End of Medium 0x19

     

File Separator 0x1C

     

Group Separator 0x1D

这是一个错误还是一个功能?有没有办法让DOMDocument采取其他行动?我在DOM处理之前使用了删除这些字符,但我想知道这是否是正确的解决方案。

2 个答案:

答案 0 :(得分:2)

可能是错误和功能。

XML 1.0是very restrictive关于它将接受的ASCII控制字符。所以看起来你的DOMDocument试图通过截断来保护你自己(虽然它应该返回一些问题的迹象,所以我称之为一个bug)。

XML 1.1是less restrictive;唯一不允许的是NUL。因此,一种可能的解决方案是配置DOMDocument对象,以便它知道它应该管理1.1。


编辑:它looks like你可以将XML版本号传递给DOMDocument构造函数(但我不是PHP程序员,所以不知道我是否正确阅读文档)。


编辑2:我只是重新阅读你的问题,并意识到你的解析,而不是构建。如果您在输入前添加了有效的1.1序言,则应该是一种解决方法。或者也许通过使用正确的版本号构建DOMDocument,它将在没有该序言的情况下正确解析。

答案 1 :(得分:1)

要添加kdgregory所说的允许字符,这些控制字符不仅在XML中无效,而且在SGML中也是如此。因此遗留的HTML或XHTML,您无法解析HTML文档中的任何字符。

(我不知道你为什么要这样做。二进制数据不属于[X] [HT] ML。)