实体'acirc'未在simplexml_load_string中定义

时间:2011-07-05 20:55:08

标签: xml utf-8 simplexml php

所以我有一个PHP脚本解析来自Google Analytics的XML响应。它已经工作了几个星期,但是今天我一直在收到这个警告,简单的xml加载字符串没有将xml响应转换为simplexml对象。

  

消息:simplexml_load_string():   实体:第743行:解析器错误:   实体'acirc'未定义

我在将响应传递给simplexml_load_string之前尝试过utf8_encoding,但它无效。我相信acirc是一个编码符号,这个符号会以某种方式搞砸解析器吗?

我上面两次发出警告,然后我也得到两次:

  

消息:simplexml_load_string():   实体:第743行:解析器错误:   实体'分'未定义

任何建议都将是一个巨大的帮助,谢谢!

感谢Marc的评论,我试过这个:

$xml = simplexml_load_string(htmlspecialchars_decode($response_body));

我得到一个有趣的错误,但xml对象仍然是空的:

  

实体:第743行:解析器错误:输入   是不正确的UTF-8,表示编码   !字节:0x84 0x26 0x63 0x65

1 个答案:

答案 0 :(得分:5)

您要从中创建SimpleXMLElement的字符串不是有效的XML。简单的xml函数只能处理有效的XML。对于任何无效的东西,你会得到错误而不是元素。当您使用数据时,您已经看到了一些错误。

第一个错误只是XML具有未定义实体的信息。你发现的第二个错误特别有趣,原因我不明白是因为你真的把字符串放到了一些编码的必杀技中。因此,即使是字符串也不能正确编码,以便simplexml处理。

如果您获得的回复应该是有效的XML,那么请使用google报告错误报告,让他们修复损坏的输出,然后解决您的问题。

修改

您是否可以从浏览器中复制并粘贴它?如果是这样,请在将其加载为XML之前尝试在其上运行html_entity_decode()。可能你没有加载XML而是HTML。更好地使用DomDocumentloadHTML函数,无需解码任何内容。