解决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
时,将返回数组而非对象。
返回值
返回一个对象,如果可选参数 assoc
为 TRUE
,则返回关联数组。
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).'})';