<?php
! defined ( 'CNZZTONGJI' ) && exit ( 'Forbidden' );
class CJSON {
const JSON_SLICE = 1;
const JSON_IN_STR = 2;
const JSON_IN_ARR = 4;
const JSON_IN_OBJ = 8;
const JSON_IN_CMT = 16;
static function encode($var) {
global $_G;
switch (gettype($var)) {
case 'boolean':
return $var ? 'true' : 'false';
case 'NULL':
return 'null';
case 'integer':
return (int) $var;
case 'double':
case 'float':
return rtrim(sprintf('%.16F',$var),'0');
case 'string':
if(function_exists('diconv') && strtolower($_G['charset']) != 'utf-8') {
$var = diconv($var, $_G['charset'], 'utf-8');
}
if(function_exists('json_encode')) {
return json_encode($var);
}
$ascii = '';
$strlen_var = strlen($var);
for ($c = 0; $c < $strlen_var; ++$c) {
$ord_var_c = ord($var{$c});
switch (true) {
case $ord_var_c == 0x08:
$ascii .= '\b';
break;
case $ord_var_c == 0x09:
$ascii .= '\t';
break;
case $ord_var_c == 0x0A:
$ascii .= '\n';
break;
case $ord_var_c == 0x0C:
$ascii .= '\f';
break;
case $ord_var_c == 0x0D:
$ascii .= '\r';
break;
case $ord_var_c == 0x22:
case $ord_var_c == 0x2F:
case $ord_var_c == 0x5C:
$ascii .= '\\'.$var{$c};
break;
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
$ascii .= $var{$c};
break;
case (($ord_var_c & 0xE0) == 0xC0):
$char = pack('C*', $ord_var_c, ord($var{$c+1}));
$c+=1;
$utf16 = self::utf8ToUTF16BE($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF0) == 0xE0):
$char = pack('C*', $ord_var_c,
ord($var{$c+1}),
ord($var{$c+2}));
$c+=2;
$utf16 = self::utf8ToUTF16BE($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF8) == 0xF0):
$char = pack('C*', $ord_var_c,
ord($var{$c+1}),
ord($var{$c+2}),
ord($var{$c+3}));
$c+=3;
$utf16 = self::utf8ToUTF16BE($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFC) == 0xF8):
$char = pack('C*', $ord_var_c,
ord($var{$c+1}),
ord($var{$c+2}),
ord($var{$c+3}),
ord($var{$c+4}));
$c+=4;
$utf16 = self::utf8ToUTF16BE($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFE) == 0xFC):
$char = pack('C*', $ord_var_c,
ord($var{$c+1}),
ord($var{$c+2}),
ord($var{$c+3}),
ord($var{$c+4}),
ord($var{$c+5}));
$c+=5;
$utf16 = self::utf8ToUTF16BE($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
}
}
return '"'.$ascii.'"';
case 'array':
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
return '{' .
join(',', array_map(array('CJSON', 'nameValue'),
array_keys($var),
array_values($var)))
. '}';
}
return '[' . join(',', array_map(array('CJSON', 'encode'), $var)) . ']';
case 'object':
if ($var instanceof Traversable)
{
$vars = array();
foreach ($var as $k=>$v)
$vars[$k] = $v;
}
else
$vars = get_object_vars($var);
return '{' .
join(',', array_map(array('CJSON', 'nameValue'),
array_keys($vars),
array_values($vars)))
. '}';
default:
return '';
}
}
static function nameValue($name, $value) {
return self::encode(strval($name)) . ':' . self::encode($value);
}
static function reduceString($str) {
$str = preg_replace(array(
'#^\s*//(.+)$#m',
'#^\s*/\*(.+)\*/#Us',
'#/\*(.+)\*/\s*$#Us'
), '', $str);
return trim($str);
}
static function decode($str, $useArray=true) {
if(function_exists('json_decode')) {
return json_decode($str, $useArray);
}
$str = self::reduceString($str);
switch (strtolower($str)) {
case 'true':
return true;
case 'false':
return false;
case 'null':
return null;
default:
if (is_numeric($str)) {
return ((float)$str == (integer)$str)
? (integer)$str
: (float)$str;
} elseif (preg_match('/^("|\').+(\1)$/s', $str, $m) && $m[1] == $m[2]) {
$delim = substr($str, 0, 1);
$chrs = substr($str, 1, -1);
$utf8 = '';
$strlen_chrs = strlen($chrs);
for ($c = 0; $c < $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;
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);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
v2.0 更新: 1、增加手机WAP统计功能 2、隐藏页面底部“站长统计”文字 3、支持 X3.1 插件简介: CNZZ( http://www.cnzz.com)是全球最大的中文互联网数据统计分析服务提供商,为中文网站及中小企业提供专业、权威、独立的第三方数据统 计与分析服务。目前累计超过500万家网站采用了CNZZ提供的流量统计服务,一周覆盖90%以上的上网用户。 本插件为CNZZ站长统计的Discuz版,安装后无需进行任何手动设置及代码修改,就能完成统计部署,帮助网站管理员、运营人员、推广人员等实时 获取论坛流量,并从流量来源、网站内容、网站访客特性等多方面提供网站分析的数据依据。 CNZZ站长统计的优势: 1、数据0延时,数据精准科学 2、保留7日完整浏览明细 3、提供页面热点图,可视化展现访客点击行为 他们都是CNZZ统计的客户:ChinaZ、4399小游戏、电玩巴士、178游戏网、机锋论坛、PPS网络电视、快播、爱卡汽车
资源推荐
资源详情
资源评论
收起资源包目录
cnzztongji_v2.0.zip (21个子文件)
cnzztongji
setting.inc.php 2KB
table
index.htm 1B
table_common_plugin_cnzztongji.php 3KB
json.class.php 12KB
config
common.const.php 348B
index.htm 1B
template.statcode.php 493B
discuz_plugin_cnzztongji_TC_BIG5.xml 4KB
uninstall.php 292B
discuz_plugin_cnzztongji_TC_UTF8.xml 4KB
discuz_plugin_cnzztongji_SC_UTF8.xml 4KB
index.htm 1B
cnzztongji.class.php 482B
discuz_plugin_cnzztongji_SC_GBK.xml 4KB
common
dz_plugin_cnzztongji_wap.php 2KB
index.htm 1B
cnzztongji.common.config.service.php 953B
cnzztongji.common.proxy.service.php 1KB
install.php 3KB
setting_wap.inc.php 2KB
upgrade.php 3KB
共 21 条
- 1
资源评论
云推荐
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功