所以我有一个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
答案 0 :(得分:5)
您要从中创建SimpleXMLElement的字符串不是有效的XML。简单的xml函数只能处理有效的XML。对于任何无效的东西,你会得到错误而不是元素。当您使用数据时,您已经看到了一些错误。
第一个错误只是XML具有未定义实体的信息。你发现的第二个错误特别有趣,原因我不明白是因为你真的把字符串放到了一些编码的必杀技中。因此,即使是字符串也不能正确编码,以便simplexml处理。
如果您获得的回复应该是有效的XML,那么请使用google报告错误报告,让他们修复损坏的输出,然后解决您的问题。
修改强>
您是否可以从浏览器中复制并粘贴它?如果是这样,请在将其加载为XML之前尝试在其上运行html_entity_decode()
。可能你没有加载XML而是HTML。更好地使用DomDocument
和loadHTML
函数,无需解码任何内容。