手动拼接json 解决PHP的json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案

本文介绍了PHP5.4中新增的JSON_UNESCAPED_UNICODE参数,用于避免中文字符转义,提升数据传输效率,并回顾了早期版本手动处理中文json的方法——pinjie_json函数示例。

PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传输量。

低版本的时候就手动拼接 json字符串  解决这个问题

public function pinjie_json($value){
        $str = "{";
        foreach ($value as $key=>$v){
            $str .= '"'.$key.'":';
            if(is_int($v)){
                $str .= $v.',';
            }else{
                $str .= '"'.$v.'",';
            }
        }

        $str = substr($str,0,-1);
        $str .= "}";
        return $str;
    }

 

<?php // getPingjiaren.php - 获取某被评人所有评价信息 // 允许跨域访问(开发调试用) header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=utf-8"); // 数据库配置 $db_host = "localhost:3306"; $db_user = "root"; $db_pass = "123456"; $db_name = "huanhu24"; // 创建连接 $conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name); if (!$conn) { echo json_encode(["error" => "数据库连接失败"], JSON_UNESCAPED_UNICODE); exit; } // 设置字符集 mysqli_set_charset($conn, "utf8mb4"); // 获取并验证 myid 参数 $beipingren_id = isset($_GET['myid']) ? intval($_GET['myid']) : 0; // 调试日志:记录接收到的 ID error_log("Received myid: " . $beipingren_id); if ($beipingren_id <= 0) { echo json_encode(["error" => "无效的被评人ID"], JSON_UNESCAPED_UNICODE); exit; } // 修复关键 bug:`time` 和 FROM 之间必须加空格! $sql = "SELECT pingjiaren, phone, score, advice, beipingren_id, `time` FROM pingjia WHERE beipingren_id = ? ORDER BY `time` DESC"; $stmt = mysqli_prepare($conn, $sql); if (!$stmt) { echo json_encode(["error" => "SQL预处理失败: " . mysqli_error($conn)], JSON_UNESCAPED_UNICODE); mysqli_close($conn); exit; } // 绑定参数执行 mysqli_stmt_bind_param($stmt, "i", $beipingren_id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $records = []; if ($result && mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { $records[] = $row; } } else { // 返回空数组表示无数据,便于前端判断 $records = []; } // 输出 JSON(支持中文不转义) echo json_encode($records, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // 清理资源 mysqli_stmt_close($stmt); mysqli_close($conn); ?> 没有什么区别
最新发布
12-03
现在的后端 <?php //1,接受前端寄过来的数据 $username = $_GET['user']; $pass = $_GET['password']; //2,判断数据 if (empty($username) || empty($pass)){ echo '数据丢失'; exit; } // 3. 连接数据库 $local = 'localhost:3306'; $db_user = 'root'; $db_pass = '123456'; $db_name = 'huanhu24'; $link = mysqli_connect($local, $db_user, $db_pass, $db_name); if (!$link) { header('Content-Type: application/json'); echo json_encode(['status' => 'error', 'message' => '数据库连接失败: ' . mysqli_connect_error()], JSON_UNESCAPED_UNICODE); exit; } // 4. 查询用户(假设表中 role 为中文) $sql = "SELECT username, role FROM user WHERE username = '$username' AND password = '$pass'"; $stmt = mysqli_query($link, $sql); if (!$stmt) { header('Content-Type: application/json'); echo json_encode(['status' => 'error', 'message' => 'SQL执行错误'], JSON_UNESCAPED_UNICODE); exit; } $row = mysqli_fetch_assoc($stmt); // 5. 返回包含中文角色的 JSON header('Content-Type: application/json'); if ($row) { echo json_encode([ 'status' => 'success', 'message' => '登录成功', 'role' => $row['role'] // 直接输出中文:如 "医生" 或 "患者" ], JSON_UNESCAPED_UNICODE); // 关键:防止中文被转义 } else { echo json_encode([ 'status' => 'fail', 'message' => '账号或密码错误', 'role' => null ], JSON_UNESCAPED_UNICODE); } exit; ?> //6,返回前端登录的结果 现在pages.json { "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages { "path": "pages/login/login", "style": { "navigationBarTitleText": "登录" } }, { "path": "pages/doctor/index", "style": { "navigationBarTitleText": "医生首页" } }, { "path": "pages/patient/index", "style": { "navigationBarTitleText": "患者首页" } } ], "globalStyle": { "navigationBarTextStyle": "black", "navigationBarTitleText": "uni-app", "navigationBarBackgroundColor": "#F8F8F8", "backgroundColor": "#F8F8F8" }, "uniIdRouter": {} } 根据这个改
09-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值