请注意,从 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>
如果您的服务器没有正确编码响应,您可能需要在解析之前处理响应。
64 位 (i8) 整数不会被 xmlrpc_decode() 解析。
使用字符串替换来解决此问题
<?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