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

如何在Symfony序列化的JSON中显示西里尔符号?

解决Symfony序列化Unicode转义及双重编码问题

1. 配置JSON编码选项解决Unicode转义

你可以通过两种方式给Symfony的JsonEncoder添加JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES选项:

方式一:实例化JsonEncoder时指定选项

修改JsonEncoder的实例代码,传入带编码选项的JsonEncode对象:

use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\JsonDecode;

// ...

$encoder = new JsonEncoder(
    new JsonEncode([
        'json_encode_options' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
    ]),
    new JsonDecode()
);

方式二:在serialize方法中传入上下文参数

保持JsonEncoder默认实例,在调用serialize时通过第三个参数传入编码选项:

$data = $serializer->serialize(
    $items,
    'json',
    [JsonEncoder::OPTIONS => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES]
);

2. 修复双重编码问题

你的代码最后一行return $this->json($data);存在双重编码问题:$serializer->serialize()已经生成了JSON字符串,而$this->json()会再次对该字符串执行json_encode,最终返回的是一个包含JSON字符串的JSON(外层多了一层引号)。

解决方法二选一:

  • 直接返回JSON字符串作为响应:
    use Symfony\Component\HttpFoundation\Response;
    
    // ...
    
    return new Response($data, 200, ['Content-Type' => 'application/json']);
    
  • 或者将序列化结果解码为数组后传给json()方法:
    $dataArray = json_decode($data, true);
    return $this->json($dataArray);
    

完整示例代码

$items = $this->entityManager->getRepository(OrderMainCategory::class)->findAll();

// 配置JsonEncoder带编码选项
$encoder = new JsonEncoder(
    new JsonEncode([
        'json_encode_options' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
    ]),
    new JsonDecode()
);

$defaultContext = [
    AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object) {
        return $object->getName();
    },
];
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
$serializer = new Serializer([$normalizer], [$encoder]);

$data = $serializer->serialize($items, 'json');

// 直接返回JSON响应,避免双重编码
return new Response($data, 200, ['Content-Type' => 'application/json']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:41