我想要做的是:我有一个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>
任何人都可以告诉我问题出在哪里?或者任何其他选择??
答案 0 :(得分:1)
好的,让我们解决这个问题吧。如果$data
包含无效的UTF-8,您应该考虑如何使其有效;一种方式(不确定这是否适合你)是utf8_encode()
而不是utf8_decode()
(用于将UTF-8转换为ISO-8859-1):
$doc = new DOMDocument();
$doc->loadXML(utf8_encode($data));
否则,您需要找出文本的哪一部分包含错误输入。我会看到我能想到的东西。
答案 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');
从外部网址加载。