请注意,从 libxml 2.7.9+ 开始,XML-RPC 响应的限制为 10MB。
如果响应更大,xmlrpc_decode 将简单地返回 NULL。
目前无法像其他 xml 函数那样覆盖此限制 (LIBXML_PARSEHUGE)
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
xmlrpc_decode — 将 XML 解码为原生 PHP 类型
此函数为实验性功能。此函数的行为、名称及其周围文档可能会在 PHP 的未来版本中未经通知而发生更改。使用此函数需自行承担风险。
xml
XMLRPC 方法返回的 XML 响应。
encoding
iconv 支持的输入编码。
根据 XMLRPC 方法返回的响应,返回数组、整数、字符串或布尔值。
参见 xmlrpc_encode_request() 的示例。
请注意,从 libxml 2.7.9+ 开始,XML-RPC 响应的限制为 10MB。
如果响应更大,xmlrpc_decode 将简单地返回 NULL。
目前无法像其他 xml 函数那样覆盖此限制 (LIBXML_PARSEHUGE)
确保服务器没有返回第一个字符为空格的字符串,这在 5.3.3 版本中会失败,并且函数返回 null(但在 5.2 中似乎没有问题)。
通过修剪响应数据轻松解决
<?php xmlrpc_decode( trim($response) ); ?>
将此与 XML-RPC 客户端一起使用,以将服务器响应解码为本地 PHP 变量。它会自动将响应 XML-RPC 数据类型转换为其 PHP 等效项。
如果接收到的 XML 格式有任何问题,此函数将仅返回 false。
需要使用类似以下内容去除 HTTP 响应标头:
<?php
$xml=(substr($response, strpos($response, "\r\n\r\n")+4));
$phpvars = xmlrpc_decode ($xml);
?>
小心编码,xmlrpc-decode 函数非常严格。例如,以下解析响应返回 NULL
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>a & b</string></value>
</param>
</params>
</methodResponse>
您应该使用实体
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>a & b</string></value>
</param>
</params>
</methodResponse>
如果您的服务器未正确编码响应,则可能需要在解析之前处理响应。
xmlrpc_decode() 不解析 64 位 (i8) 整数。
使用字符串替换来解决此问题
<?php
$xml = str_replace('i8>', 'i4>', $xml);
$decoded_xml = xmlrpc_decode($xml);
?>
显然,xmlrpc_decode(或 php)存在一个轻微的问题,它会重新格式化此输入:<value><double>0.000000</double></value>
作为双精度数 0。
要解决此问题,请使用:number_format($val, 2);
输出将为 0.00