@@ -864,13 +864,24 @@ protected function _parseApiReply($method, $reply)
864864 }
865865 } elseif (!$ parsed = json_decode ($ reply , $ need_array )) {
866866 if ($ reply ) {
867- $ reply = explo
DC1B
de ('& ' , $ reply );
868- foreach ($ reply as $ element ) {
869- if (stristr ($ element , '= ' )) {
870- list ($ key , $ value ) = explode ('= ' , $ element );
871- $ parsed [$ key ] = $ value ;
872- } else {
873- $ parsed ['message ' ] = $ element ;
867+ if (stripos ($ reply , '< ' . '?xml version="1.0" encoding="UTF-8"? ' . '> ' ) === 0 ) {
868+ // we received XML...
869+ // since this only happens for errors,
870+ // don't perform a full decoding
871+ preg_match ('/<request>(.*)<\/request>/ ' , $ reply , $ request );
872+ preg_match ('/<error>(.*)<\/error>/ ' , $ reply , $ error );
873+ $ parsed ['request ' ] = htmlspecialchars_decode ($ request [1 ]);
874+ $ parsed ['error ' ] = htmlspecialchars_decode ($ error [1 ]);
875+ } else {
876+ // assume query format
877+ $ reply = explode ('& ' , $ reply );
878+ foreach ($ reply as $ element ) {
879+ if (stristr ($ element , '= ' )) {
880+ list ($ key , $ value ) = explode ('= ' , $ element );
881+ $ parsed [$ key ] = $ value ;
882+ } else {
883+ $ parsed ['message ' ] = $ element ;
884+ }
874885 }
875886 }
876887 }
0 commit comments