<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

/* 내장 json_decode는 PHP 버전 5.2 이상에서 지원 */
function json_decode_custom($json) 
{  
	$comment = false; 
	$out = '$x='; 

	for ($i=0; $i<strlen($json); $i++) 
	{ 
		if (!$comment) 
		{ 
			if ($json[$i] == '{' || $json[$i] == '[')        $out .= ' array('; 
			else if ($json[$i] == '}' || $json[$i] == ']')    $out .= ')'; 
			else if ($json[$i] == ':')    $out .= '=>'; 
			else                         $out .= $json[$i];            
		} 
		else $out .= $json[$i]; 
		if ($json[$i] == '"')    $comment = !$comment; 
	} 
	eval($out.';'); 
	return $x; 
}  

/* 내장 json_encode는 PHP 버전 5.2 이상에서 지원 */
function json_encode_custom($a=false)
{
	if (is_null($a)) return 'null';
	if ($a === false) return 'false';
	if ($a === true) return 'true';
	if (is_scalar($a))
	{
		if (is_float($a))
		{
			 // Always use "." for floats.
			 return floatval(str_replace(",", ".", strval($a)));
		}

		if (is_string($a))
		{
			 static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
			 return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
		}
		else
		return $a;
	}
	$isList = true;
	for ($i = 0, reset($a); $i < count($a); $i++, next($a))
	{
		if (key($a) !== $i)
		{
			 $isList = false;
			 break;
		}
	}
	$result = array();
	if ($isList)
	{
		foreach ($a as $v) $result[] = json_encode_custom($v);
		return '[' . join(',', $result) . ']';
	}
	else
	{
		foreach ($a as $k => $v) $result[] = json_encode_custom($k).':'.json_encode_custom($v);
		return '{' . join(',', $result) . '}';
	}
}
?>