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

PHP中json_encode输出\"及重复转义引号的去除方法

PHP json_encode输出合法JSON完整解决方案

冗余转义字符修复

出现多层\"、重复转义引号的核心原因是源数据已经被多次转义(入库前转义、读取后二次转义、HTML实体编码未解码),在编码后再替换字符串的处理逻辑本质是治标不治本,可按以下流程处理:

  1. 先清洗原始字段,在数组组装阶段完成所有转义清理:
// 通用字段清洗函数,可复用处理所有文本字段
function cleanEscapeString(string $rawStr): string
{
    // 先解码HTML实体(把"转为普通引号)
    $decodeStr = htmlspecialchars_decode($rawStr, ENT_QUOTES);
    // 递归清理多余斜杠,直到无冗余转义
    while (str_contains($decodeStr, '\\"')) {
        $decodeStr = stripslashes($decodeStr);
    }
    return $decodeStr;
}

// 调用示例
$goodsTitle = cleanEscapeString($rawGoodsTitle);
  1. 编码时添加正确参数,避免额外转义:
    编码时使用JSON_UNESCAPED_UNICODE避免中文转义,JSON_UNESCAPED_SLASHES避免斜杠被额外转义,json_encode会自动对需要转义的字符做标准处理,无需手动干预。

外层status/statusText字段配置

需要在数组组装阶段就把status、statusText放在数组第一维,不要在JSON编码完成后手动拼接:

// 完整响应数组结构示例
$response = [
    'status' => 0, // 直接放在最外层
    'statusText' => '请求成功',
    'data' => [
        'goods' => [
            [
                'title' => $goodsTitle,
                'price' => 99.9
            ]
        ]
        // 其他业务数据
    ]
];

// 输出响应,必须先设置响应头
header('Content-Type: application/json; charset=utf-8');
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
exit;

注意事项

  • 所有数据修改必须在数组阶段完成,禁止对json_encode输出的字符串做替换、拼接操作,避免破坏JSON结构
  • 排查上游数据链路(入库、读取、第三方接口拉取)的转义逻辑,从源头关闭不必要的重复转义,避免后续反复清洗
  • 如果返回JSON仍然报错,可以用json_last_error_msg()打印编码错误信息,快速定位异常字段

内容的提问来源于stack exchange,提问作者Peter The Angular Dude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:04