php json decode n r,PHP JSON decode 的替代方法

这段代码展示了PHP如何处理字符串,包括转义字符、Unicode编码到UTF-8的转换,以及JSON解码。它检查字符串中的特殊字符,并根据上下文进行适当的转换,如换行符、制表符等。此外,还涉及到了JSON字符串中数组和对象的解析。
摘要由CSDN通过智能技术生成

$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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值