|
楼主 |
发表于 2012-10-10 17:26:43
|
显示全部楼层
本帖最后由 JohnceCena2012 于 2012-10-10 17:30 编辑
- case $substr_chrs_c_2 == '\"':
- case $substr_chrs_c_2 == '\\\'':
- case $substr_chrs_c_2 == '\\\\':
- case $substr_chrs_c_2 == '\\/':
- if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
- ($delim == "'" && $substr_chrs_c_2 != '\"')) {
- $utf8 .= $chrs{++$c};
- }
- break;
- case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
- $utf16 = chr(hexdec(substr($chrs, ($c+2), 2)))
- . chr(hexdec(substr($chrs, ($c+4), 2)));
- $utf8 .= self::utf16beToUTF8($utf16);
- $c+=5;
- break;
- case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
- $utf8 .= $chrs{$c};
- break;
- case ($ord_chrs_c & 0xE0) == 0xC0:
- $utf8 .= substr($chrs, $c, 2);
- ++$c;
- break;
- case ($ord_chrs_c & 0xF0) == 0xE0:
- $utf8 .= substr($chrs, $c, 3);
- $c += 2;
- break;
- case ($ord_chrs_c & 0xF8) == 0xF0:
- $utf8 .= substr($chrs, $c, 4);
- $c += 3;
- break;
- case ($ord_chrs_c & 0xFC) == 0xF8:
- $utf8 .= substr($chrs, $c, 5);
- $c += 4;
- break;
- case ($ord_chrs_c & 0xFE) == 0xFC:
- $utf8 .= substr($chrs, $c, 6);
- $c += 5;
- break;
- }
- }
- return $utf8;
- } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
- if ($str{0} == '[') {
- $stk = array(self::JSON_IN_ARR);
- $arr = array();
- } else {
- if ($useArray) {
- $stk = array(self::JSON_IN_OBJ);
- $obj = array();
- } else {
- $stk = array(self::JSON_IN_OBJ);
- $obj = new stdClass();
- }
- }
- array_push($stk, array('what' => self::JSON_SLICE,
- 'where' => 0,
- 'delim' => false));
- $chrs = substr($str, 1, -1);
- $chrs = self::reduceString($chrs);
- if ($chrs == '') {
- if (reset($stk) == self::JSON_IN_ARR) {
- return $arr;
- } else {
- return $obj;
- }
- }
- $strlen_chrs = strlen($chrs);
- for ($c = 0; $c <= $strlen_chrs; ++$c) {
- $top = end($stk);
- $substr_chrs_c_2 = substr($chrs, $c, 2);
- if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == self::JSON_SLICE))) {
- $slice = substr($chrs, $top['where'], ($c - $top['where']));
- array_push($stk, array('what' => self::JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
- if (reset($stk) == self::JSON_IN_ARR) {
- array_push($arr, self::decode($slice,$useArray));
- } elseif (reset($stk) == self::JSON_IN_OBJ) {
- if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
- $key = self::decode($parts[1],$useArray);
- $val = self::decode($parts[2],$useArray);
- if ($useArray) {
- $obj[$key] = $val;
- } else {
- $obj->$key = $val;
- }
- } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
- $key = $parts[1];
- $val = self::decode($parts[2],$useArray);
- if ($useArray) {
- $obj[$key] = $val;
- } else {
- $obj->$key = $val;
- }
- }
- }
- } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != self::JSON_IN_STR)) {
- array_push($stk, array('what' => self::JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
- } elseif (($chrs{$c} == $top['delim']) &&
- ($top['what'] == self::JSON_IN_STR) &&
- (($chrs{$c - 1} != "\") ||
- ($chrs{$c - 1} == "\" && $chrs{$c - 2} == "\"))) {
- array_pop($stk);
- } elseif (($chrs{$c} == '[') &&
- in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
- array_push($stk, array('what' => self::JSON_IN_ARR, 'where' => $c, 'delim' => false));
- } elseif (($chrs{$c} == ']') && ($top['what'] == self::JSON_IN_ARR)) {
- array_pop($stk);
- } elseif (($chrs{$c} == '{') &&
- in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
- array_push($stk, array('what' => self::JSON_IN_OBJ, 'where' => $c, 'delim' => false));
- } elseif (($chrs{$c} == '}') && ($top['what'] == self::JSON_IN_OBJ)) {
- array_pop($stk);
- } elseif (($substr_chrs_c_2 == '/**') &&
- in_array($top['what'], array(self::JSON_SLICE, self::JSON_IN_ARR, self::JSON_IN_OBJ))) {
- array_push($stk, array('what' => self::JSON_IN_CMT, 'where' => $c, 'delim' => false));
- $c++;
- } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == self::JSON_IN_CMT)) {
- array_pop($stk);
- $c++;
- for ($i = $top['where']; $i <= $c; ++$i) {
- $chrs = substr_replace($chrs, ' ', $i, 1);
- }
- }
- }
- if (reset($stk) == self::JSON_IN_ARR) {
- return $arr;
- } elseif (reset($stk) == self::JSON_IN_OBJ) {
- return $obj;
- }
- }
- }
- }
- static function utf8ToUnicode( &$str ) {
- $unicode = array();
- $values = array();
- $lookingFor = 1;
- for ($i = 0; $i < strlen( $str ); $i++ ) {
- $thisValue = ord( $str[ $i ] );
- if ( $thisValue < 128 ) {
- $unicode[] = $thisValue;
- } else {
- if ( count( $values ) == 0 ) {
- $lookingFor = ( $thisValue < 224 ) ? 2 : 3;
- }
- $values[] = $thisValue;
- if ( count( $values ) == $lookingFor ) {
- $number = ( $lookingFor == 3 ) ?
- ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ):
- ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 );
- $unicode[] = $number;
- $values = array();
- $lookingFor = 1;
- }
- }
- }
- return $unicode;
- }
- static function unicodeToUTF8( &$str )
- {
- $utf8 = '';
- foreach( $str as $unicode )
- {
- if ( $unicode < 128 )
- {
- $utf8.= chr( $unicode );
- }
- elseif ( $unicode < 2048 )
- {
- $utf8.= chr( 192 + ( ( $unicode - ( $unicode % 64 ) ) / 64 ) );
- $utf8.= chr( 128 + ( $unicode % 64 ) );
- }
- else
- {
- $utf8.= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) );
- $utf8.= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) / 64 ) );
- $utf8.= chr( 128 + ( $unicode % 64 ) );
- }
- }
- return $utf8;
- }
- static function utf8ToUTF16BE(&$str, $bom = false) {
- $out = $bom ? "\xFE\xFF" : '';
- if(function_exists('mb_convert_encoding'))
- return $out.mb_convert_encoding($str,'UTF-16BE','UTF-8');
- $uni = self::utf8ToUnicode($str);
- foreach($uni as $cp)
- $out .= pack('n',$cp);
- return $out;
- }
- static function utf16beToUTF8(&$str) {
- $uni = unpack('n*',$str);
- return self::unicodeToUTF8($uni);
- }
- }
复制代码 mobile.class.php- <?php
- /**
- * Init by Hubery
- */
- class mobile_core {
- function result($result) {
- global $_G;
- echo mobile_core::json($result);
- exit;
- }
- function json($encode) {
- require_once './json.class.php';
- return CJSON::encode($encode);
- }
- function getvalues($variables, $keys, $subkeys = array()) {
- $return = array();
- foreach($variables as $key => $value) {
- foreach($keys as $k) {
- if($k{0} == '/' && preg_match($k, $key) || $key == $k) {
- if($subkeys) {
- $return[$key] = mobile_core::getvalues($value, $subkeys);
- } else {
- if(!empty($value) || !empty($_GET['debug']) || (is_numeric($value) && intval($value) === 0 )) {
- $return[$key] = is_array($value) ? mobile_core::arraystring($value) : (string)$value;
- }
- }
- }
- }
- }
- return $return;
- }
- function arraystring($array) {
- foreach($array as $k => $v) {
- $array[$k] = is_array($v) ? mobile_core::arraystring($v) : (string)$v;
- }
- return $array;
- }
-
- function errorExit($error){
- $outPut = array(
- 'ErrorMessage' => $error);
- mobile_core::result($outPut);
-
- exit();
- }
- }
- ?>
复制代码 使用方法:
- include './mobile.class.php';
- $outPut = array(
- 'ErrorMessage' => $ErrorMessage,
- 'Test001' => 'Very Good');
- mobile_core::result($outPut);
复制代码 |
|