【问题标题】:Reading in Malformed XML (unencoded XML entities) with PHP使用 PHP 读取格式错误的 XML(未编码的 XML 实体)
【发布时间】:2009-06-25 19:44:10
【问题描述】:

我在 PHP 中解析格式错误的 XML 时遇到了一些问题。特别是,我正在查询以 XML 格式返回数据的第三方 Web 服务,而无需在实际数据中编码 XML 实体。例如,其中一个元素包含一个 ASCII 心脏“

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

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

谢谢!

【问题讨论】:

    标签: php xml parsing malformed


    【解决方案1】:

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

    【讨论】:

    • 完美,谢谢:)!我觉得现在不只是尝试那个配置选项有点傻。
    【解决方案2】:
    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]/','', "我 ")));会抛出,因为你在逃跑。
    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 2020-01-04
    • 2014-08-02
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多