$strlen_chrs; ++$c) {$substr_chrs_c_2=substr($chrs,$c,2);$ord_chrs_c=ord($chrs{$c});
switch (true) {
case$substr_chrs_c_2=='\b':$utf8.=chr(0x08);
++$c;
break;
case$substr_chrs_c_2=='\t':$utf8.=chr(0x09);
++$c;
break;
case$substr_chrs_c_2=='\n':$utf8.=chr(0x0A);
++$c;
break;
case$substr_chrs_c_2=='\f':$utf8.=chr(0x0C);
++$c;
break;
case$substr_chrs_c_2=='\r':$utf8.=chr(0x0D);
++$c;
break;
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;
casepreg_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.=$this->utf162utf8($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(SERVICES_JSON_IN_ARR);$arr= array();
} else {
if ($this->use&SERVICES_JSON_LOOSE_TYPE) {$stk= array(SERVICES_JSON_IN_OBJ);$obj= array();
} else {$stk= array(SERVICES_JSON_IN_OBJ);$obj= newstdClass();
}
}array_push($stk, array('what'=>SERVICES_JSON_SLICE,'where'=>0,'delim'=>false));$chrs=substr($str,1, -1);$chrs=$this->reduce_string($chrs);
if ($chrs=='') {
if (reset($stk) ==SERVICES_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'] ==SERVICES_JSON_SLICE))) {$slice=substr($chrs,$top['where'], ($c-$top['where']));array_push($stk, array('what'=>SERVICES_JSON_SLICE,'where'=> ($c+1),'delim'=>false));
if (reset($stk) ==SERVICES_JSON_IN_ARR) {array_push($arr,$this->decode($slice));
} elseif (reset($stk) ==SERVICES_JSON_IN_OBJ) {$parts= array();
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis',$slice,$parts)) {$key=$this->decode($parts[1]);$val=$this->decode($parts[2]);
if ($this->use&SERVICES_JSON_LOOSE_TYPE) {$obj[$key] =$val;
} else {$obj->$key=$val;
}
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis',$slice,$parts)) {$key=$parts[1];$val=$this->decode($parts[2]);
if ($this->use&SERVICES_JSON_LOOSE_TYPE) {$obj[$key] =$val;
} else {$obj->$key=$val;
}
}
}
} elseif ((($chrs{$c} =='"') || ($chrs{$c} =="'")) && ($top['what'] !=SERVICES_JSON_IN_STR)) {array_push($stk, array('what'=>SERVICES_JSON_IN_STR,'where'=>$c,'delim'=>$chrs{$c}));
} elseif (($chrs{$c} ==$top['delim']) && ($top['what'] ==SERVICES_JSON_IN_STR) && ((strlen(substr($chrs,0,$c)) -strlen(rtrim(substr($chrs,0,$c),'\\'))) %2!=1)) {array_pop($stk);
} elseif (($chrs{$c} =='[') &&in_array($top['what'], array(SERVICES_JSON_SLICE,SERVICES_JSON_IN_ARR,SERVICES_JSON_IN_OBJ))) {array_push($stk, array('what'=>SERVICES_JSON_IN_ARR,'where'=>$c,'delim'=>false));