【问题标题】:Symfony2 JsonResponse utf8 encoding issues on Debian Stable php-5.4Debian Stable php-5.4 上的 Symfony2 JsonResponse utf8 编码问题
【发布时间】:2015-03-25 11:28:24
【问题描述】:

在返回 UTF8 字符时,我在 Debian Stable php5 (5.4.39-0+deb7u1) 上遇到了 JsonResponse 问题。

我在 Debian Testing php5 (5.6.6+dfsg-2) 上开发了一个应用程序,下面的代码就像一个魅力:

$response = new JsonResponse();
$response->headers->set('Content-Type', 'application/json');
$response->setData($data);
return $response;

但在部署到稳定的 prod 服务器后,我开始收到完全相同的 DB/Data 字符集等的以下异常:

request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "Malformed UTF-8 characters, 
possibly incorrectly encoded." at /site/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/JsonResponse.php
 line 123 {"exception":"[object] (InvalidArgumentException(code: 0): 
Malformed UTF-8 characters, possibly incorrectly encoded. at 
/site/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/JsonResponse.php:123)"} []

作为 $data DO 传递的来自 DB 的响应包含我无法控制的 UTF8 字符。我只需要展示它们。

我想我遇到了 5.4 的错误,但我怎样才能轻松绕过它? 我确实试过了:

    $response = new JsonResponse();
    $response->headers->set('Content-Type', 'application/json');
    $response->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    $response->setData($data);
    return $response;

但我得到了同样的错误。

想法?

【问题讨论】:

    标签: php symfony utf-8 jsonresponse


    【解决方案1】:

    在讨论了#symfony 频道后,我找到了一种解决方法:

        $response = new Response(json_encode($data, JSON_UNESCAPED_UNICODE));
        $response->headers->set('Content-Type', 'application/json');
        return $response;
    

    欢迎其他好的解决方案。我认为这个解决方案是一个肮脏的黑客......

    【讨论】:

      【解决方案2】:

      我认为您没有得到有效的 UTF-8 字符串。 试试看,为什么会有无效的 utf8 字节块(http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences)。

      你可以用unpack分析字节:https://stackoverflow.com/a/11466734/4469738

      【讨论】:

      • 我真的不知道我是否收到了有效的 UTF8。输入数据来自外部来源(电子邮件),我只需要显示它。我无法重新格式化它,所以我应该以某种方式对其进行转义。
      猜你喜欢
      • 2011-07-14
      • 2016-05-19
      • 2013-03-02
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多