'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
'BOOLEAN' => array('VALUE'),
'I4' => array('VALUE'),
+ 'I8' => array('VALUE'),
'INT' => array('VALUE'),
'STRING' => array('VALUE'),
'DOUBLE' => array('VALUE'),
$this->_xh['php_class'] = null;
break;
case 'I4':
+ case 'I8':
case 'INT':
case 'STRING':
case 'BOOLEAN':
break;
case 'BOOLEAN':
case 'I4':
+ case 'I8':
case 'INT':
case 'STRING':
case 'DOUBLE':
$this->_xh['value'] = (int)$this->_xh['ac'];
}
}
- //$this->_xh['ac']=''; // is this necessary?
$this->_xh['lv'] = 3; // indicate we've found a value
break;
case 'NAME':
$this->_xh['valuestack'][count($this->_xh['valuestack']) - 1]['name'] = $this->_xh['ac'];
break;
case 'MEMBER':
- //$this->_xh['ac']=''; // is this necessary?
// add to array in the stack the last element built,
// unless no VALUE was found
if ($this->_xh['vt']) {
}
break;
case 'DATA':
- //$this->_xh['ac']=''; // is this necessary?
$this->_xh['vt'] = null; // reset this to check for 2 data elements in a row - even if they're empty
break;
case 'STRUCT':
// "lookforvalue==3" means that we've found an entire value
// and should discard any further character data
if ($this->_xh['lv'] != 3) {
- // G. Giunta 2006-08-23: useless change of 'lv' from 1 to 2
- //if($this->_xh['lv']==1)
- //{
- // if we've found text and we're just in a <value> then
- // say we've found a value
- //$this->_xh['lv']=2;
- //}
- // we always initialize the accumulator before starting parsing, anyway...
- //if(!@isset($this->_xh['ac']))
- //{
- // $this->_xh['ac'] = '';
- //}
$this->_xh['ac'] .= $data;
}
}
// skip processing if xml fault already detected
if ($this->_xh['isf'] < 2) {
if (substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';') {
- // G. Giunta 2006-08-25: useless change of 'lv' from 1 to 2
- //if($this->_xh['lv']==1)
- //{
- // $this->_xh['lv']=2;
- //}
$this->_xh['ac'] .= $data;
}
}
*
* @param string $httpHeader the http Content-type header
* @param string $xmlChunk xml content buffer
- * @param string $encodingPrefs comma separated list of character encodings to be used as default (when mb extension is enabled)
- * @return string
+ * @param string $encodingPrefs comma separated list of character encodings to be used as default (when mb extension is enabled).
+ * This can also be set globally using PhpXmlRpc::$xmlrpc_detectencodings
+ * @return string the encoding determined. Null if it can't be determined and mbstring is enabled,
+ * PhpXmlRpc::$xmlrpc_defencoding if it can't be determined and mbstring is not enabled
*
* @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
*/
// discussion: see http://www.yale.edu/pclt/encoding/
// 1 - test if encoding is specified in HTTP HEADERS
- //Details:
+ // Details:
// LWS: (\13\10)?( |\t)+
// token: (any char but excluded stuff)+
- // quoted string: " (any char but double quotes and cointrol chars)* "
+ // quoted string: " (any char but double quotes and control chars)* "
// header: Content-type = ...; charset=value(; ...)*
// where value is of type token, no LWS allowed between 'charset' and value
// Note: we do not check for invalid chars in VALUE:
}
// 4 - if mbstring is available, let it do the guesswork
- // NB: we favour finding an encoding that is compatible with what we can process
if (extension_loaded('mbstring')) {
+ if ($encodingPrefs == null && PhpXmlRpc::$xmlrpc_detectencodings != null) {
+ $encodingPrefs = PhpXmlRpc::$xmlrpc_detectencodings;
+ }
if ($encodingPrefs) {
$enc = mb_detect_encoding($xmlChunk, $encodingPrefs);
} else {