- 论坛徽章:
- 0
|
由于开发一个ajax file manager
for
web开源项目,数据交换使用的json格式,后来发现在低版本的php上运行会有问题,仔细调试发现json_decode和json_encode无
法正常工作,于是查阅资料,发现低版本的php没有实现这两个函数,为了兼容性,我只好自己实现一个php版的json编码解码代码,并保证和
json2.js的一致,测试调试并通过,现在将其公布出来,供有相同需求的同学使用:
- <?php
-
/* * ****************************************************************************
-
* $base: $
-
*
-
* $Author: $
-
* Berlin Qin
-
*
-
* $History: base.js $
-
* Berlin Qin 2011/5/15 created
-
*
-
* $contacted
-
* webfmt@gmail.com
-
* http://www.webfmt.com
-
*
-
* *************************************************************************** */
-
/* ===========================================================================
-
* license
-
*
-
* You may not use this file except in compliance with the License.
* Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied,except that you announce what to you write.
* The Initial Developer of the Original Code is Berlin Qin. Copyright (C) 2000-2050, Berlin Qin., All Rights Reserved.
-
*
-
*************************************************************************/
-
-
function jsonDecode($json)
-
{
-
$result = array();
-
try
-
{
-
if (PHP_VERSION_ID > 50300)
-
{
-
$result = (array) json_decode($json);
-
}
-
else
-
{
-
$json = str_replace(array("\\\\", "\\\""), array("\", """), $json);
-
$parts = preg_split("@(\"[^\"]*\")|([\[\]\{\},:])|\s@is", $json, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
-
foreach ($parts as $index => $part)
-
{
-
if (strlen($part) == 1)
-
{
-
switch ($part)
-
{
-
case "[":
-
case "{":
-
$parts[$index] = "array(";
-
break;
-
case "]":
-
case "}":
-
$parts[$index] = ")";
-
break;
-
case ":":
-
$parts[$index] = "=>";
-
break;
-
case ",":
-
break;
-
default:
-
break;
-
}
-
}
-
}
-
$json = str_replace(array("\", """, "$"), array("\\\\", "\\\"", "\\$"), implode("", $parts));
-
$result = eval("return $json;");
-
}
-
}
-
catch (Exception $e)
-
{
-
$result = array("error" => $e->getCode());
-
}
-
return $result;
-
}
-
-
function valueTostr($val)
-
{
-
if (is_string($val))
-
{
-
$val = str_replace('\"', "\\\"", $val);
-
$val = str_replace("\\", "\\\\", $val);
-
$val = str_replace("/", "\\/", $val);
-
$val = str_replace("\t", "\\t", $val);
-
$val = str_replace("\n", "\\n", $val);
-
$val = str_replace("\r", "\\r", $val);
-
$val = str_replace("\b", "\\b", $val);
-
$val = str_replace("\f", "\\f", $val);
-
return '"' . $val . '"';
-
}
-
elseif (is_int($val))
-
return sprintf('%d', $val);
-
elseif (is_float($val))
-
return sprintf('%F', $val);
-
elseif (is_bool($val))
-
return ($val ? 'true' : 'false');
-
else
-
return 'null';
-
}
-
-
function jsonEncode($arr)
-
{
-
$result = "{}";
-
try
-
{
-
if (PHP_VERSION_ID > 50300)
-
{
-
$result = json_encode($arr);
-
}
-
else
-
{
-
$parts = array();
-
$is_list = false;
-
if (!is_array($arr))
-
{
-
$arr = (array) $arr;
-
}
-
$end = count($arr) - 1;
-
if (count($arr) > 0)
-
{
-
if (is_numeric(key($arr)))
-
{
-
$result = "[";
-
for ($i = 0; $i < count($arr); $i++)
-
{
-
if (is_array($arr[$i]))
-
{
-
$result = $result . jsonEncode($arr[$i]);
-
}
-
else
-
{
-
$result = $result . valueTostr($arr[$i]);
-
}
-
if ($i != $end)
-
{
-
$result = $result . ",";
-
}
-
}
-
$result = $result . "]";
-
}
-
else
-
{
-
$result = "{";
-
$i = 0;
-
foreach ($arr as $key => $value)
-
{
-
$result = $result . '"' . $key . '":';
-
if (is_array($value))
-
{
-
$result = $result . jsonEncode($value);
-
}
-
else
-
{
-
$result = $result . valueTostr($value);
-
}
-
if ($i != $end)
-
{
-
$result = $result . ",";
-
}
-
$i++;
-
}
-
$result = $result . "}";
-
}
-
}
-
else
-
{
-
$result = "[]";
-
}
-
}
-
}
-
catch (Exception $e)
-
{
-
-
}
-
return $result;
-
}
-
?>
|
|