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

服务器端俄语JSON编码异常问题求助

俄语JSON编码在服务器端失效问题排查与解决

问题现象

  • 服务器端执行json_encode($data['block'], JSON_UNESCAPED_UNICODE);后,数据库存储的是Unicode转义形式(如"[{"type":"content","data":{"content":"<blockquote>\n<p>Вероятно,),而非原生俄语字符
  • 本地环境运行正常:数据库存储原生俄语JSON,$data["block"]数组含原生俄文,编码后输出为"[{"type":"content","data":{"content":"<p>Это должно сработать редактирую<\/p>"}}]"

排查与解决步骤

1. 检查数据库连接与字段字符集

服务器端数据库连接未配置UTF-8字符集是常见原因:

  • 确保数据库连接时指定utf8mb4字符集:
    // MySQLi方式
    mysqli_set_charset($conn, "utf8mb4");
    // PDO方式
    $pdo = new PDO("mysql:host=localhost;dbname=your_db;charset=utf8mb4", $user, $pass);
    
  • 检查数据库表及字段的字符集设置,确保为utf8mb4(而非latin1等非Unicode编码)

2. 验证PHP环境默认字符集

服务器端PHP的默认字符集可能未设为UTF-8:

  • 在php.ini中配置:
    default_charset = "UTF-8"
    
  • 或在脚本开头添加:
    header('Content-Type: text/html; charset=utf-8');
    

3. 确认$data['block']的原始编码

如果服务器端的$data['block']已被转义为Unicode字符串(如"\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e"),需先解码再编码:

// 递归解码Unicode转义字符
function decodeUnicode($str) {
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function($match) {
        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }, $str);
}

// 处理数组中所有字符串元素
array_walk_recursive($data['block'], function(&$value) {
    if (is_string($value)) {
        $value = decodeUnicode($value);
    }
});

// 执行编码
$json = json_encode($data['block'], JSON_UNESCAPED_UNICODE);

4. 检查PHP版本对JSON_UNESCAPED_UNICODE的支持

JSON_UNESCAPED_UNICODE从PHP 5.4.0开始支持,若服务器版本过低,使用替代方案:

function json_encode_unescaped($data) {
    $json = json_encode($data);
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function($match) {
        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }, $json);
}

$json = json_encode_unescaped($data['block']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:20:04