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

3
我在使用PHP解析不规范的XML时遇到了一些问题。特别是我正在查询一个第三方webservice,它以未编码XML实体的形式返回数据。例如,其中一个元素包含ASCII爱心'<3'(不带引号),而XML解析器将其视为开标签。它应该是'&lt;3'。
目前,我只是将XML字符串传递给SimpleXMLElement,可预见地,在这些情况下会失败。我查看了一些资料,似乎PHP Tidy包可以帮我解决问题,但是可以进行的配置量太大了:(
因此,我想知道是否有其他人遇到过类似的问题,如果有,他们是如何解决的。
谢谢!
2个回答

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);

太好了,谢谢!我现在感觉有点傻,因为我没有尝试那个配置选项。 - jszwedko

-1
  1. 将内容作为字符串读取。
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. 将转换后的字符串加载到SimpleXMLElement中

目前为止,这对我很有效。


这个不行:new SimpleXMLElement(htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','', "<foo>I <3 Philadelphia</foo>"))); 会抛出异常,因为你过度转义了。 - Matthew Flaschen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接