You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON重音字符编码问题及MySQL数据查询代码调试求助

嘿,我看你这段代码里有两个核心问题需要解决:一个是MySQL连接与查询的API混用问题,另一个是带重音字符的JSON编码异常问题,我来一步步帮你搞定。

1. 先修复数据库查询的代码问题

你现在混合使用了mysqli的面向对象API(比如$conn->connect_error)和过程式API(比如mysqli_query),这很容易导致兼容性问题。咱们统一成过程式风格(或者你也可以改成纯面向对象,这里先以过程式为例),同时加上字符集设置(这也是解决重音字符问题的前提):

// 正确创建数据库连接,替换成你的实际数据库信息
$conn = mysqli_connect('localhost', '你的用户名', '你的密码', '你的数据库名');
if (!$conn) {
    die('连接失败: ' . mysqli_connect_error());
}

// 关键:设置连接字符集为utf8mb4(支持所有Unicode字符,包括重音、emoji等)
mysqli_set_charset($conn, 'utf8mb4');

$sql = "SELECT * FROM Quotes WHERE Id=2";
$result = mysqli_query($conn, $sql);

$return_arr = array();
if ($result) {
    while ($row = mysqli_fetch_assoc($result)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote'] = $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category']; // 补全你未写完的字段
        
        $return_arr[] = $row_array;
    }
    // 释放结果集资源
    mysqli_free_result($result);
} else {
    die('查询失败: ' . mysqli_error($conn));
}

// 关闭数据库连接
mysqli_close($conn);

2. 解决带重音字符的JSON编码问题

重音字符(比如é、ñ、中文等)在JSON编码时出现异常,大多是因为字符集不统一或者编码参数不对,按照下面的步骤处理:

第一步:确保数据库表的字符集正确

先检查你的Quotes表(以及对应的字段)字符集是否为utf8mb4,如果不是,用SQL语句修改:

ALTER TABLE Quotes CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

第二步:正确编码JSON

使用json_encode时加上JSON_UNESCAPED_UNICODE参数,这样会保留原始的Unicode字符,而不是转义成\uXXXX格式,同时设置正确的响应头:

// 编码JSON,保留重音等Unicode字符
$json_output = json_encode($return_arr, JSON_UNESCAPED_UNICODE);

// 设置响应头,告诉客户端这是UTF-8编码的JSON
header('Content-Type: application/json; charset=utf-8');

// 输出JSON
echo $json_output;

额外说明

  • utf8mb4是MySQL中真正支持全Unicode的字符集,比旧的utf8更全面,能覆盖所有重音符号、特殊字符甚至emoji。
  • 尽量不要混用mysqli的面向对象和过程式API,保持代码风格统一能减少潜在bug。

内容的提问来源于stack exchange,提问作者xDazuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:53