解决php的json(PHP )

发布时间:2023-12-08

解决php的json(PHP )

更新:2022-11-13 21:06

本文目录一览:

1、如何解决php中json
2、[PHP JSON格式的中文显示问题解决方法](#PHP JSON格式的中文显示问题解决方法)
3、PHP中json_encode中文乱码问题

如何解决php中json

json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行解码

说明

mixed json_decode ( string $json [, bool $assoc ] )

接受一个 JSON 格式的字符串并将其转换为 PHP 变量。

参数

  • json:待解码的 JSON 格式字符串。
  • assoc:当该参数为 TRUE 时,将返回数组而非对象。

返回值

返回一个对象,如果可选参数 assocTRUE,则返回关联数组。 2. json_encode() json_encode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_encode — 对变量进行 JSON 编码

说明

string json_encode ( mixed $value [, int $options = 0 ] )

返回 value 值的 JSON 形式。

参数

  • value:待编码的值,可以是任意数据类型(除 resource 类型外)。
  • options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE

返回值

编码成功则返回一个以 JSON 形式表示的字符串,失败时返回 FALSE

更新日志

版本 说明
5.4.0 options 参数增加常量:JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK
5.3.0 增加 options 参数。

PHP JSON格式的中文显示问题解决方法

返回 JSON 数据中文显示的问题。 在上一篇文章中,返回 JSON 格式的中文显示为 \u5723\u8bde\u8282\u5343\u4e07\u597d\u793c\u5927\u5949\u9001

解决方法一:

<?php
function Notice() {
    include './include/conn.php'; // 数据库链接文件
    $sql_notice = mysql_query('SELECT * FROM gg_notice WHERE enable = "1" LIMIT 0,10');
    $notice = mysql_fetch_array($sql_notice, MYSQL_ASSOC);
    $str = json_encode($notice);
    // Linux
    return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $str);
    // Windows
    // return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $str);
}
?>

另外从网上搜索到的其他方法:

<?php
/**
 * JSON 生成, 分析,支持中文
 */
class Json_Helper {
    /**
     * 生成 JSON
     */
    public static function encode($str) {
        $json = json_encode($str);
        // Linux
        return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $json);
        // Windows
        // return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $json);
    }
    /**
     * 分析 JSON
     */
    public static function decode($str) {
        return json_decode($str);
    }
}
?>

PHP中json_encode中文乱码问题

PHP 中使用 json_encode() 内置函数(PHP 5.2)可以使得 PHP 数据与其他语言很好地传递和使用。该函数的功能是将数值转换为 JSON 数据存储格式。

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
// 输出结果:
// {"a":1,"b":2,"c":3,"d":4,"e":5}

下面看一款 json_encode 中文乱码问题的解决方法是使用 urlencode() 函数处理数组内容,在 json_encode 之前,把所有数组内容都用 urlencode() 处理一下,然后使用 json_encode() 转换成 JSON 字符串,最后再用 urldecode() 将编码过的中文转回来。

function arrayrecursive($array, $function, $apply_to_keys_also = false) {
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayrecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
/**
 * 将数组转换为 JSON 字符串(兼容中文)
 * @param array $array 要转换的数组
 * @return string 转换得到的 JSON 字符串
 * @access public
 */
function json($array) {
    arrayrecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}
$array = array(
    'name' => '希亚',
    'age' => 20
);
echo json($array);
// 应用实例
$servname = "localhost";
$sqlservname = "root";
$sqlservpws = "123456";
$sqlname = "lock1";
$db = mysql_connect($servname, $sqlservname, $sqlservpws) or die("数据库连接失败");
mysql_select_db($sqlname, $db);
$sql = "select * from t_operater";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
while ($obj = mysql_fetch_object($result)) {
    $arr[] = $obj;
}
echo '({"total":"'.$rows.'","results":'.json_encode($arr).'})';