使用PHP读取格式错误的XML(未编码的XML实体)

时间:2009-06-25 19:44:10

标签: php xml parsing malformed

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

现在我只是将XML字符串传递给SimpleXMLElement,可以预见,这些实例会失败。我已经做了一些环顾四周,似乎PHP Tidy包可能能够帮助我,但你可以做的配置量是压倒性的:(

因此,我只是想知道是否有其他人有这样的问题,如果有的话,他们是如何解决的。

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-1)

  1. 以字符串形式阅读内容。
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. 将转换后的字符串加载到SimpleXMLElement
  4. 到目前为止它对我有用。