1

私がやりたいことは次のとおりです。xml形式でデータを生成するCRM APIがあり、
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 が含まれている場合は、それを有効にする方法を検討する必要があります。1つの方法(それがうまくいくかどうかはわかりません)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 に答える