2016-07-30 6 views
1

PHP CURLを使用して特定のURLにAPI呼び出しを行っています。私はブラウザで応答を受け取ることができます。API呼び出しから受け取ったUTF-16 XMLを解析する方法

CURLは、このような変数には、この応答を保存している:私は

print_r(htmlspecialchars($output, true)); 

を使用する場合

$output = curl_exec($ch); 

は今、私は私のブラウザでこの応答を取得します。

<?xml version="1.0" encoding="utf-16" standalone="no"?> 
<loginres> 
<sessiontoken>123456</sessiontoken> 
<timeout>7/30/2016 11:18:22 AM</timeout> 
<status>1</status> 
</loginres> 

これはUTF-16でエンコードされたレスポンスなので、SimpleXMLまたはDOMドキュメントを使用することはできません。あなたはこれを試すことができます(私は数回失敗しました)。何も来ていない。

また、私は、Arrayフィルタで関数を使用する「爆発」するために、試してみましたが、応答は次のようになります。

Array 
(
[0] => version="1.0" 
[2] => encoding="utf-16" 
[3] => standalone="no"?> 


[5] => 123456 

[7] => 7/30/2016 
[8] => 11:26:09 
[9] => AM 

[11] => 1 

) 

は今、私の質問があり、私はこのファイルを使うのですか.... XMLタグからPHP変数を作成し、解析して、データベースで操作して保存したいと考えました。

もう1つの方法は、ローカルサーバーのxmlファイルにレスポンスを保存して、Jquery、Ajaxを使用してレスポンスを保存する方法ですが、その方法はわかりません。 助けてください。

答えて

0

DOMを正しく定義すると、UTF-16が正しく読み込まれます。 APIは引き続きUTF-8を返します。

// create some xml string and convert it to utf-16 
$xml = iconv('utf-8', 'utf-16', '<?xml version="1.0" encoding="utf-16"?><foo>Ä</foo>'); 

// look an encoded special char and a BOM 
var_dump($xml); 

$document = new DOMDocument(); 
$document->loadXml($xml); 

// loaded just fine, here is the node content as UTF-8 
var_dump($document->documentElement->textContent); 

出力https://eval.in/614245:私の質問の

string(104) "��<?xml version="1.0" encoding="utf-16"?><foo>�</foo>" 
string(2) "Ä" 
+0

目的は、PHPで、APIの応答で作成されたUTF-16 XMLを使用する方法の助けを求めることでした。私は、XMLタグから変数を作成し、操作を行いたいと思っていました。 APIサーバーを制御できないため、DOM自体で変換するのは難しいでしょう。 –

+0

ここで違いはありません - file_get_contents()を使用してフェッチし、DOMにロードします。それが壊れていない場合、DOMはそれをロードします。 – ThW

関連する問題