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

使用FlightPHP时JSON无法转UTF-8,浏览器显示乱码如何解决?

修复FlightPHP接口JSON浏览器乱码问题

导致浏览器显示JSON乱码的核心原因是响应头未明确指定UTF-8编码,或者数据库连接未使用UTF-8编码读取数据。以下是两种关键修复步骤:

1. 确保数据库连接使用UTF-8编码

修改PDO注册时的DSN,添加charset=utf8mb4参数,保证从数据库读取的数据是UTF-8编码:

Flight::register('db', 'PDO', array('mysql:host=localhost;dbname=api;charset=utf8mb4','root',''));

utf8mb4比utf8支持更全面的Unicode字符(比如Emoji),推荐使用。

2. 明确设置JSON响应的字符编码

Flight的json()方法可以通过参数指定编码,或者手动添加响应头强制浏览器使用UTF-8解析:

方法一:使用json()方法的编码参数

Flight::json($data, 200, true, 'UTF-8');

第四个参数就是响应内容的字符编码,设置后会自动在响应头中添加charset=utf-8。

方法二:手动添加响应头

如果方法一不生效,可以在Flight::json()之前手动设置响应头:

Flight::header('Content-Type: application/json; charset=utf-8');
Flight::json($data);

修改后的完整代码

<?php

require 'flight/Flight.php';

// 数据库连接添加UTF-8编码
Flight::register('db', 'PDO', array('mysql:host=localhost;dbname=api;charset=utf8mb4','root',''));


Flight::route('GET /personas', function () {
    $sentence = Flight::db()->prepare("SELECT * FROM `persons`");
    $sentence->execute();
    $data = $sentence->fetchAll(PDO::FETCH_ASSOC);

    // 手动设置响应头或使用json方法的编码参数
    Flight::header('Content-Type: application/json; charset=utf-8');
    Flight::json($data);
});


Flight::start();

?>

原理说明:API客户端(如Postman)通常默认以UTF-8解析响应内容,但浏览器会优先根据响应头的charset字段决定编码,若未明确指定,可能会使用系统默认编码(如GBK),导致JSON中文乱码。通过以上两步,既能保证数据从数据库读取时是UTF-8,又能强制浏览器用UTF-8解析响应,即可解决乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:42:28