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

PHP脚本json_encode转义斜杠问题及types数组格式适配咨询

问题分析

你的核心问题是在SQL中提前拼接带引号的字符串,再经json_encode处理时会被二次转义:因为json_encode会把字符串内的引号识别为普通字符进行转义,最终输出带\的结果,这完全不符合下游要求的JSON数组格式。

正确处理方案

不要在SQL层拼接JSON格式的字符串,推荐两种更可靠的处理方式:

方案1:SQL返回原始值,PHP端转换为数组

  1. 从数据库查询出未拼接的原始类型值(或把现有[O,M,W]格式的字符串拆分为单个值)
  2. 在PHP中将单个值存入数组,再赋值给types字段,最后整体执行json_encode

示例代码:

// 假设从数据库获取的原始types字符串为 "[O,M,W]"
$rawTypes = $row['types'];
// 去除首尾方括号,按逗号分割为数组
$typesArray = explode(',', trim($rawTypes, '[]'));
// 组装最终数据数组
$feedData[] = [
    'types' => $typesArray,
    // 其他字段...
];
// 生成标准JSON输出
echo json_encode($feedData);

这样输出的types就是下游需要的标准JSON数组["O","M","W"],不会出现转义问题。

方案2:利用数据库原生JSON函数生成合法数组(适用于MySQL 5.7+等支持JSON的数据库)

直接在SQL中生成合法的JSON数组,避免后续转义问题:

-- 直接生成固定值的JSON数组
SELECT JSON_ARRAY('O', 'M', 'W') AS types;

-- 如果是从现有字段拼接,比如type1、type2、type3是表中列名
SELECT JSON_ARRAY(type1, type2, type3) AS types;

查询得到的types字段本身就是JSON类型,PHP取出后可直接作为数组处理(PDO可配置自动解析JSON),再执行json_encode即可得到正确结果。

为什么之前的方法无效?

你在SQL中生成带转义引号的字符串(如[\"O\",\"M\",\"W\"]),PHP拿到的是普通字符串,json_encode会对字符串内的所有特殊字符进行转义,最终输出会变成"[\"O\",\"M\",\"W\"]"——这是一个字符串类型的字段,而非下游需要的数组类型。JSON_UNESCAPED_SLASHES仅处理斜杠的转义,对引号无效,因此无法解决问题。

总结

优先选择上述两种方案,避免在SQL层提前拼接JSON格式字符串,让PHP或数据库原生处理为数组/JSON类型后再执行json_encode,即可得到符合要求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:20