加载xml数据时发出file_get_contents()警告

时间:2012-08-30 06:29:56

标签: php xml domdocument

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

我收到了错误:

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

我谷歌我有一个替代解决方案与file_get_contents()一起使用,但我仍然收到警告:

enter image description here

这是我用来获取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>

任何人都可以告诉我问题出在哪里?或者任何其他选择??

3 个答案:

答案 0 :(得分:1)

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

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

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

资源

Ensuring valid utf-8 in PHP

答案 1 :(得分:0)

你可以试试 simplexml_load_file php函数..

$xml = simplexml_load_file("addinsrss.xml");
echo "<pre>";print_r($xml);echo "</pre>";

答案 2 :(得分: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');从外部网址加载。