如何优化ThinkPHP中JSON数据解析错误处理及格式化编码转换?
- 内容介绍
- 文章标签
- 相关推荐
本文共计911个文字,预计阅读时间需要4分钟。
ThinkPHP 报错:
为什么 input('param') 读 JSON 会出错
ThinkPHP 默认把所有请求参数(包括 application/json 的原始 body)塞进 $_POST,但 JSON 数据根本不会自动进 $_POST —— 它只在 php://input 里。用 input('param') 去读,实际是查空数组,返回 null 后再 json_decode(null),就触发 PHP 的 silent failure,后续逻辑崩掉。
- 真正该用的是
input('', '', false)(第三个参数设为false表示不自动过滤/转换) - 更稳妥的做法是手动读取:
file_get_contents('php://input'),再判断是否为空或含 BOM - 如果前端发的是
Content-Type: application/json;charset=UTF-8,但带 UTF-8 BOM(如 Windows 记事本保存的 JSON),json_decode()会直接失败,错误提示却像语法错
json_decode() 返回 null 却没报错?检查这三处
ThinkPHP 不会拦截 json_decode() 的失败,它只负责传参。
本文共计911个文字,预计阅读时间需要4分钟。
ThinkPHP 报错:
为什么 input('param') 读 JSON 会出错
ThinkPHP 默认把所有请求参数(包括 application/json 的原始 body)塞进 $_POST,但 JSON 数据根本不会自动进 $_POST —— 它只在 php://input 里。用 input('param') 去读,实际是查空数组,返回 null 后再 json_decode(null),就触发 PHP 的 silent failure,后续逻辑崩掉。
- 真正该用的是
input('', '', false)(第三个参数设为false表示不自动过滤/转换) - 更稳妥的做法是手动读取:
file_get_contents('php://input'),再判断是否为空或含 BOM - 如果前端发的是
Content-Type: application/json;charset=UTF-8,但带 UTF-8 BOM(如 Windows 记事本保存的 JSON),json_decode()会直接失败,错误提示却像语法错
json_decode() 返回 null 却没报错?检查这三处
ThinkPHP 不会拦截 json_decode() 的失败,它只负责传参。

