1

我想做的是:我有一个 CRM API,它以 xml 格式生成数据,
我正在使用 DOMDocument() 将数据提取成碎片。问题是当我尝试加载数据时:$dom->loadXML($data);

我得到了错误:

DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8

我用谷歌搜索了一个替代解决方案,file_get_contents()但我仍然收到如下警告:

在此处输入图像描述

这是我用来获取 xml 数据的代码:

$text = file_get_contents(stripslashes(utf8_decode($data)));

$doc = new DOMDocument();
$doc->loadXML($text);

在这里我放了我的 XML 返回数据,不完整,只是一小部分:

<?xml version="1.0" encoding="utf-8"?>
<whmcsapi version="5.0.3">
<action>getticket</action>
<result>success</result>
<ticketid>5767</ticketid>
<tid>409865</tid>
<c>NwLldOG6</c>
<deptid>2</deptid>
<deptname>Technical</deptname>
<userid>27476</userid>
<name>shirley b broyles (home)</name>
<email>sbroyles1@stx.rr.com</email>
<cc></cc>
<date>2012-08-27 19:52:12</date>
<subject>printer not working</subject>
<status>Customer-Reply</status>
<priority>High</priority>
<admin></admin>
<lastreply>2012-08-28 23:34:17</lastreply>
<flag>0</flag>
<service></service>
<replies>
<reply>

谁能告诉我问题出在哪里?或任何替代方案?

4

3 回答 3

1

好的,让我们把问题剥离。如果$data包含无效的 UTF-8,您应该考虑如何使其有效;一种方法(不确定这是否适合您)是使用utf8_encode()而不是utf8_decode()(用于将 UTF-8 转换为 ISO-8859-1):

$doc = new DOMDocument();
$doc->loadXML(utf8_encode($data));

否则,您将需要找出文本的哪一部分包含错误输入。我会看看我能想出什么。

资源

确保 PHP 中的 utf-8 有效

于 2012-08-30T06:36:13.113 回答
0

你可以试试simplexml_load_file php函数..

$xml = simplexml_load_file("addinsrss.xml");
echo "<pre>";print_r($xml);echo "</pre>";
于 2012-08-30T06:33:39.483 回答
0

如果您已经拥有 xml 源,则不要将其传递给 FGC。将其直接传递给 domDocument。

或者你也可以使用 simplexml_load_string(),

<?php
$xml = '<?xml version="1.0" encoding="utf-8"?>
<whmcsapi version="5.0.3">
<action>getticket</action>
<result>success</result>
<ticketid>5767</ticketid>
<tid>409865</tid>
<c>NwLldOG6</c>
<deptid>2</deptid>
<deptname>Technical</deptname>
<userid>27476</userid>
</whmcsapi>
';

$xml = simplexml_load_string($xml);

print_r($xml);
/*
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [version] => 5.0.3
        )

    [action] => getticket
    [result] => success
    [ticketid] => 5767
    [tid] => 409865
    [c] => NwLldOG6
    [deptid] => 2
    [deptname] => Technical
    [userid] => 27476
    ...
    ...
)
*/
echo $xml->tid; //409865 
?>

或直接用于$xml = simplexml_load_file('http://example.com/somexml.xml');从外部 url 加载。

于 2012-08-30T06:46:16.490 回答