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

PHP生成含HTML的JSON payload报错问题求助

排查JSON格式化报错的常见原因

以下是可能导致你的payload JSON格式化失败的核心问题及排查方案:

  • HTML内容的特殊字符未正确处理
    HTML中的双引号"、反斜杠\、换行符或未闭合标签,会直接破坏JSON的语法结构。比如生成的HTML包含<div class="patient-box">,如果json_encode时未正确转义双引号,会导致JSON的键值对引号冲突。
    排查:直接输出cardata字段内容,检查是否有未转义的特殊字符;可启用参数强制转义:

    $payload = json_encode($data, JSON_HEX_QUOT | JSON_HEX_TAG);
    
  • 数据库编码与PHP编码不匹配
    若数据库字段编码不是UTF-8,取出的cardata可能包含乱码或非法UTF-8字符,导致json_encode生成无效JSON甚至返回false。
    排查:用mb_check_encoding($dbResult['cardata'], 'UTF-8')验证编码;确保数据库连接、表字段编码均为utf8mb4。

  • 手动拼接JSON字符串的语法错误
    如果你是手动拼接包含entities键的payload(而非通过PHP数组转JSON),极容易出现引号不匹配、逗号遗漏或结构错误。
    正确做法:始终通过数组构造结构再转JSON,避免手动拼接:

    // 构造完整数据结构
    $payloadData = [
        'entities' => [
            [
                'cardata' => $dbResult['cardata'],
                // 其他必要字段
            ]
        ]
    ];
    $payload = json_encode($payloadData, JSON_UNESCAPED_UNICODE);
    
  • HTML包含JSON禁止的控制字符
    patient_file()生成的HTML可能包含ASCII控制字符(如\x00-\x1F),这类字符不允许出现在JSON中,会导致格式化工具报错。
    排查:用正则过滤控制字符:

    $cleanCardata = preg_replace('/[\x00-\x1F\x7F]/u', '', $dbResult['cardata']);
    
  • json_encode执行失败未被捕获
    直接输出json_encode的结果前,先检查是否生成失败:

    $payload = json_encode($payloadData);
    if ($payload === false) {
        die(json_last_error_msg()); // 输出具体错误信息,如"Malformed UTF-8 characters"
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:09