請注意,從 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
XML-RPC 方法傳回的 XML 回應。
encoding
iconv 支援的輸入編碼。
根據 XML-RPC 方法傳回的回應,傳回陣列、整數、字串或布林值。
請參閱 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