【问题标题】:Entity 'acirc' not defined from simplexml_load_string实体“acirc”未从 simplexml_load_string 定义
【发布时间】:2011-07-05 20:55:07
【问题描述】:

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

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

在将响应传递到 simplexml_load_string 之前,我已经尝试对响应进行 utf8_encoding,但它不起作用。我相信 acirc 是一个编码符号,并且这个符号以某种方式搞砸了解析器?

我收到了两次上述警告,然后我也收到了两次:

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

任何建议都会有很大帮助,谢谢!

感谢 Marc 的评论,我已经尝试过了:

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

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

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

【问题讨论】:

  • XML 仅支持 XML 元字符 ('"<>&) 的 5 个字符实体。其他任何东西都是无效的 XML,它基本上是所有的 HTML 字符实体。

标签: xml utf-8 simplexml php


【解决方案1】:

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

第一个错误只是您的 XML 具有未定义实体的信息。您发现的第二个错误特别有趣,原因我不明白,因为您确实将字符串放入了某种编码必杀技中。因此,即使是字符串也不再正确编码以供 simplexml 处理。

如果您得到的响应确实是有效的 XML,则向 google 提交错误报告,让他们修复损坏的输出,然后您的问题应该得到解决。

编辑:

您从浏览器复制并粘贴它?如果是这样,请在将其加载为 XML 之前尝试在其上运行 html_entity_decode()。可能您加载的不是 XML,而是 HTML。最好改用DomDocumentloadHTML 函数,这样就不需要解码任何东西了。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多