Ejemplo n.º 1
0
function php_json_encode($data)
{
    if (is_array($data) || is_object($data)) {
        $islist = is_array($data) && (empty($data) || array_keys($data) === range(0, count($data) - 1));
        if ($islist) {
            $json = '[' . implode(',', array_map('php_json_encode', $data)) . ']';
        } else {
            $items = array();
            foreach ($data as $key => $value) {
                $items[] = php_json_encode("{$key}") . ':' . php_json_encode($value);
            }
            $json = '{' . implode(',', $items) . '}';
        }
    } elseif (is_string($data)) {
        $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
        $json = '';
        $len = strlen($string);
        for ($i = 0; $i < $len; $i++) {
            $char = $string[$i];
            $c1 = ord($char);
            if ($c1 < 128) {
                $json .= $c1 > 31 ? $char : sprintf("\\u%04x", $c1);
                continue;
            }
            $c2 = ord($string[++$i]);
            if (($c1 & 32) === 0) {
                $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
                continue;
            }
            $c3 = ord($string[++$i]);
            if (($c1 & 16) === 0) {
                $json .= sprintf("\\u%04x", ($c1 - 224 << 12) + ($c2 - 128 << 6) + ($c3 - 128));
                continue;
            }
            $c4 = ord($string[++$i]);
            if (($c1 & 8) === 0) {
                $u = (($c1 & 15) << 2) + ($c2 >> 4 & 3) - 1;
                $w1 = (54 << 10) + ($u << 6) + (($c2 & 15) << 2) + ($c3 >> 4 & 3);
                $w2 = (55 << 10) + (($c3 & 15) << 6) + ($c4 - 128);
                $json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
            }
        }
    } else {
        $json = strtolower(var_export($data, true));
    }
    return $json;
}
Ejemplo n.º 2
0
/**
 * This function is required for older PHP servers to provide equivalent
 * behavior with json_encode($subject) which is not available prior to PHP 5.2
 * (JSON: JavaScript Over Network; used for serialized JS objects)
 *
 * @param $subject mixed; scalar or array (indexed or associative) 
 * @return JSON-encoded string
 */
function php_json_encode(&$subject)
{
    $result = "";
    if (is_array($subject)) {
        $indexed = true;
        $array_length = count($subject);
        for ($i = 0; $i < $array_length; $i++) {
            if (!array_key_exists($i, $subject)) {
                $indexed = false;
                break;
            }
        }
        if ($indexed) {
            $result = "[";
            $buffer = array();
            for ($i = 0; $i < $array_length; $i++) {
                $buffer[] = sprintf("%s", php_json_encode($subject[$i]));
            }
            $result .= implode(",", $buffer);
            $result .= "]";
        } else {
            $result = "{";
            $buffer = array();
            foreach ($subject as $key => $value) {
                $buffer[] = sprintf("\"%s\":%s", $key, php_json_encode($value));
            }
            $result .= implode(",", $buffer);
            $result .= "}";
        }
    } else {
        if (is_numeric($subject)) {
            $result = $subject;
        } else {
            if (is_object($subject)) {
                $result = php_json_encode(get_object_vars($subject));
            } else {
                $result = "\"" . json_encode_string($subject) . "\"";
            }
        }
    }
    return $result;
}