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

PHP json_encode编码数组多余换行导致JSON解析错误

问题根因

json_encode不会主动向字符串中插入换行符,异常换行的核心原因是待编码数组的字符串字段(尤其是title字段)本身就包含不可见的换行符(\n、\r或\r\n)。
print_r输出数组内容时不会转义这类控制字符,会直接将换行符渲染为实际换行,视觉上和普通空格分隔的文本没有明显差异,因此前期排查时很难发现。
严格来说带转义换行符的JSON属于合法格式,但如果响应未正确声明JSON格式、或客户端解析逻辑对裸换行兼容不佳,就会出现Postman多行展示、前端解析报错的问题。

修复方案

按落地优先级选择操作即可:

  • 编码前清洗数组内容
    遍历数组,将所有字符串内的换行、回车符替换为普通空格,从根源移除异常字符:
    array_walk_recursive($array, function (&$value) {
        if (is_string($value)) {
            $value = str_replace(["\r\n", "\r", "\n"], ' ', trim($value));
        }
    });
    $json = json_encode($array, JSON_NUMERIC_CHECK);
    
  • 规范JSON响应输出逻辑
    输出JSON前添加正确的响应头,告知客户端按JSON格式解析内容,避免文本模式下的渲染异常。注意该代码必须放在所有实际输出之前执行:
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($array, JSON_NUMERIC_CHECK);
    exit;
    
  • 排查数据源过滤异常字符
    检查数组数据的来源(数据库查询结果、接口接收参数、文件读取内容等),在数据入库、接收环节就做好非法控制字符过滤,避免异常数据流入后续业务流程。

如果执行完上述操作仍存在解析错误,调用json_last_error_msg()函数打印编码阶段的错误信息,定位是否存在非UTF-8字符、递归过深等其他问题:

$json = json_encode($array, JSON_NUMERIC_CHECK);
if (json_last_error() !== JSON_ERROR_NONE) {
    var_dump(json_last_error_msg());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:18:24