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

PHP Symfony中JsonResponse返回双引号带转义斜杠如何解决

问题解答

核心原理说明

JSON 语法规范强制要求:字符串内部出现的双引号必须使用反斜杠转义,你在响应原始报文中看到的"description": "Variable \"user\" is invalid"是完全符合JSON标准的合法格式。
所有标准JSON解析工具(比如前端的JSON.parse()、PHP的json_decode())解析该内容时,会自动丢弃反斜杠,直接得到原始字符串Variable "user" is invalid,不存在“多余反斜杠”的问题,不需要做额外处理。

特殊场景调整方案

如果确实有特殊业务需求要调整JSON序列化行为(比如取消中文、斜杠的转义),可以给JsonResponse传入自定义的json_encode参数:

public function error($codeError, $message, $statusCode): JsonResponse
{
    // 第四个参数为json_encode的配置常量,可按需组合
    return new JsonResponse([
        'code' => $codeError,
        'description' => $message
    ], $statusCode, [], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}

注意:不存在合法的JSON序列化参数可以取消双引号的转义,取消双引号转义会直接破坏JSON结构,导致解析器将内部双引号识别为字符串结束标记,最终解析失败。


非标准格式输出方案(不推荐)

如果你的调用方明确要求返回未转义双引号的非标准JSON内容,可以放弃使用JsonResponse,手动构造响应字符串后用基础Response返回:

use Symfony\Component\HttpFoundation\Response;

public function error($codeError, $message, $statusCode): Response
{
    // 手动构造非标准JSON字符串,注意该内容无法被标准JSON解析器识别
    $responseContent = sprintf(
        '{"code":"%s","description":"%s"}',
        addslashes($codeError),
        $message // 完全不需要转义双引号可直接传入
    );
    return new Response($responseContent, $statusCode, [
        'Content-Type' => 'application/json'
    ]);
}

警告:该方案生成的响应不符合JSON规范,仅在对接特殊非标准调用方时使用,常规业务场景不建议采用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:05