如何解析从API调用

时间:2016-07-30 05:09:43

标签: php arrays xml curl utf-16

我正在使用PHP CURL对特定的URL进行API调用。我能够在浏览器中收到回复。

CURL将此响应保存在变量中,如下所示:

$output = curl_exec($ch);

现在我使用

print_r(htmlspecialchars($output, true));

我在浏览器中收到此回复。

<?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文档。你可以尝试一下(我失败了好几次)。什么都没有。

另外,我试过在阵列过滤器中使用“explode”函数,响应如下:

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变量,并解析它们,以便在我的数据库中进行操作和保存。

另一种选择是将响应保存在我的本地服务器的xml文件中,并使用Jquery,Ajax使用它,但我不知道该怎么做。 请帮忙。

1 个答案:

答案 0 :(得分: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) "Ä"