PHP自定义json_encode函数


PHP #json_encode #函数2012-10-26 09:43

大家都知道,json_encode函数是对变量进行 JSON 编码,PHP版本需要5.2.0以上才支持。在实际应用中,当有中文字符时,当直接使用 json_encode() 函数会使汉字编码成Unicode码。所以有了这个适用性比较广的函数 yige_json_encode() 来解决这个问题。

<?php

/**
 * 对变量进行 JSON 编码
 *
 * @param mix $a 待编码的变量
 * @return string 返回一个以 JSON 形式表示的字符串
 * 
 * @link http://yige.org/php/
 */
function yige_json_encode($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', '\"'));
	         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[] = yige_json_encode($v);
        return '['.join(',', $result).']';
    } else {
        foreach($a as $k => $v) $result[] = yige_json_encode($k).':'.yige_json_encode($v);
        return '{'.join(',', $result).'}';
    }
}

?>


相关文章

粤ICP备11097351号-1