PHP中json_encode输出\"及重复转义引号的去除方法
PHP json_encode输出合法JSON完整解决方案
冗余转义字符修复
出现多层\"、重复转义引号的核心原因是源数据已经被多次转义(入库前转义、读取后二次转义、HTML实体编码未解码),在编码后再替换字符串的处理逻辑本质是治标不治本,可按以下流程处理:
- 先清洗原始字段,在数组组装阶段完成所有转义清理:
// 通用字段清洗函数,可复用处理所有文本字段 function cleanEscapeString(string $rawStr): string { // 先解码HTML实体(把"转为普通引号) $decodeStr = htmlspecialchars_decode($rawStr, ENT_QUOTES); // 递归清理多余斜杠,直到无冗余转义 while (str_contains($decodeStr, '\\"')) { $decodeStr = stripslashes($decodeStr); } return $decodeStr; } // 调用示例 $goodsTitle = cleanEscapeString($rawGoodsTitle);
- 编码时添加正确参数,避免额外转义:
编码时使用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
相关产品推荐
相关产品推荐

