2009-06-25 66 views
3

我在PHP中解析格式错误的XML时遇到了一些麻烦。特别是我查询的第三方Web服务以XML格式返回数据,而无需在实际数据中对XML实体进行编码。例如,其中一个元素包含一个ASCII心脏,'< 3',没有引号,XML解析器将其视为开始标记。它应该是'& lt; 3'。用PHP读取格式不正确的XML(未编码的XML实体)

现在我只是简单地将XML字符串传递到SimpleXMLElement中,可以预见,这些实例会失败。我已经做了一些四处张望,看起来像PHP Tidy包可能能够帮助我,但你可以做的配置量是压倒性的:(

因此,我只是想知道如果有人有一个问题是这样,如果是这样,他们如何能够解决这个问题

感谢

回答

5

尝试tidy.repairString:!

php > $tidy = new tidy(); 
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1)); 
php > print($repaired); 
<foo>I &lt;3 Philadelphia</foo> 
php > $el = new SimpleXMLElement($repaired); 
+0

完美,谢谢:)!我觉得现在不仅仅尝试配置选项感觉很傻。 – jszwedko 2009-06-26 13:21:31

-1
  1. 阅读内容作为字符串
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. 负载在的SimpleXMLElement

经变换的串它为我工作至今。

+0

这不起作用:新的SimpleXMLElement(htmlspecialchars(preg_replace('/ [\ x- \ x8 \ xb- \ xc \ xe- \ x1f] /','',“ I <3 Philadelphia”))) ;会抛出,因为你过度逃脱。 – 2009-06-25 20:01:06