0

0

ThinkPHP响应内容怎么进行JSON编码中文不转义_JSON响应处理【技巧】

絕刀狂花

絕刀狂花

发布时间:2026-03-13 15:33:58

|

456人浏览过

|

来源于php中文网

原创

ThinkPHP 6 的 json() 默认转义中文是因未启用 JSON_UNESCAPED_UNICODE,可通过 config/app.php 全局配置、手动调用 json_encode() 或中间件统一处理解决,推荐 TP6.1+ 使用全局配置方式。

thinkphp响应内容怎么进行json编码中文不转义_json响应处理【技巧】

ThinkPHP 6 的 json() 默认会转义中文

默认情况下,ThinkPHP 6 的 json() 方法(包括 return json($data))底层调用的是 PHP 原生的 json_encode(),且未传入 JSON_UNESCAPED_UNICODE 标志,所以中文会被编码成 \uXXXX 形式。这不是 bug,是默认行为,但接口返回带转义的中文对前端调试、日志查看都不友好。

常见错误现象:{"name":"\u5f20\u4e09"} 而不是 {"name":"张三"};Postman 或浏览器直接打开接口看到一堆 \u 编码。

  • 使用场景:API 接口开发、前后端分离项目、需要人工可读 JSON 的调试环境
  • 注意:仅影响输出内容显示,不影响 JSON 解析正确性 —— 浏览器和大多数语言的 JSON 解析器都能正常处理 \u 编码
  • 性能影响几乎为零,JSON_UNESCAPED_UNICODE 是 PHP 内置标志,无额外开销

全局配置 json_encode 选项(TP6.1+)

ThinkPHP 6.1 起支持在 config/app.php 中配置 JSON 编码选项,这是最干净、一劳永逸的方式。

修改 config/app.php,找到或新增 'json_encode' => [] 配置项:

立即学习PHP免费学习笔记(深入)”;

'json_encode' => [
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
],

这样所有 json()response()->json()、以及框架内部自动 JSON 化(如异常响应)都会带上这两个标志。

  • JSON_UNESCAPED_UNICODE:关键,让中文不被转义
  • JSON_UNESCAPED_SLASHES:顺手加上,避免 / 被转成 \/,更简洁
  • 旧版本 TP6.0 不支持该配置,需手动封装或中间件处理

手动调用 json_encode() 替代 json()(兼容所有 TP6)

如果不能升级或需临时控制某一个接口,直接绕过框架封装,自己调用 json_encode() 并设置响应头即可。

示例(控制器中):

$data = ['name' => '李四', 'msg' => '操作成功'];
return response(json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES))
    ->header('Content-Type', 'application/json; charset=utf-8');
  • 必须显式设置 Content-Type,否则可能被识别为 text/html
  • 不要混用:避免写成 json(json_encode(...)),那会二次编码导致乱码
  • 注意 json_encode() 返回的是字符串,不是数组,别误传给其他需要数组的地方

中间件统一处理 JSON 响应(适合老项目或细粒度控制)

如果你的项目已有大量 return json(...) 调用,又不想逐个改,可以写一个响应中间件,在输出前拦截并重编码。

创建中间件(如 app/middleware/JsonUnescape.php),核心逻辑:

public function handle($request, \Closure $next)
{
    $response = $next($request);
    if ($response instanceof \think\Response
        && $response->getHeader('content-type') === 'application/json; charset=utf-8')
    {
        $content = $response->getContent();
        $data = json_decode($content, true);
        if (json_last_error() === JSON_ERROR_NONE && is_array($data)) {
            $newContent = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            $response->content($newContent);
        }
    }
    return $response;
}
  • 只对明确标记为 JSON 的响应生效,避免误处理 HTML 或下载响应
  • 依赖 json_decodejson_encode 两次,有轻微性能损耗,但对大多数 API 场景可忽略
  • 容易踩的坑:若原始响应已压缩(如 Gzip),中间件里直接改 content 会导致解压失败;确保该中间件在压缩中间件之前执行

真正要注意的其实是边界情况:比如接口返回了非 UTF-8 编码的字符串(如 GBK)、或者数据里混入了不可见控制字符,这时候加不加 JSON_UNESCAPED_UNICODE 都会出错 —— 编码一致性比转义与否更优先。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

183

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

464

2023.10.13

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号