【问题标题】:How to parse UTF-16 XML received from API call如何解析从 API 调用收到的 UTF-16 XML
【发布时间】:2016-12-04 20:43:48
【问题描述】:

我正在使用 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 来使用它,但我不知道该怎么做。 请帮忙。

【问题讨论】:

    标签: php arrays xml curl utf-16


    【解决方案1】:

    如果正确定义 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) "Ä"
    

    【讨论】:

    • 我的问题的目的是寻求有关如何在 PHP 中使用 API 响应生成的 UTF-16 xml 的帮助。我想从 XML 标签创建变量,并进行操作。在 DOM 本身上转换它会很困难,因为我无法控制 API 服务器。
    • 这里没有区别 - 使用 file_get_contents() 获取它并将其加载到 DOM 中。如果没有损坏,DOM 会加载它。
    猜你喜欢
    • 2013-08-04
    • 2015-07-18
    • 1970-01-01
    • 2018-07-30
    • 2013-10-17
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多