接口返回中文乱码,多数是编码、响应头、数据库字符集、json_encode 参数不统一。下面给一套可以直接套用的排查模板。
完整代码
<?php
header('Content-Type: application/json; charset=utf-8');
$data = [
'site' => '侠客岛',
'message' => '中文 JSON 正常显示',
'time' => date('Y-m-d H:i:s'),
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
// PDO 连接 MySQL 时推荐这样写:
// $pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'user', 'pass');
// $pdo->exec('SET NAMES utf8mb4');排查清单
1. PHP 文件保存为 UTF-8。2. 响应头使用 charset=utf-8。3. MySQL 连接 DSN 带 charset=utf8mb4。4. json_encode 使用 JSON_UNESCAPED_UNICODE。5. 前端不要重复 decode/encode。
关键词:PHP JSON 中文乱码、接口中文乱码、utf8mb4。