2015-03-25 91 views
9

我在返回UTF8字符时遇到Debian Stable php5(5.4.39-0 + deb7u1)上的JsonResponse问题。关于Debian的Symfony2 JsonResponse utf8编码问题稳定php-5.4

我开发Debian的测试PHP5的应用(5.6.6 + DFSG-2)和下面的代码工作就像一个魅力:

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

,但部署到稳定PROD服务器后,我开始得到以下例外完全相同的DB /数据字符集等:

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)"} [] 

从DB是为$ DO数据传递的响应包含UTF8字符,我无法控制。我只需要展示它们。

我想我打了一个5.4的错误,但我怎么能轻松地在它周围走动? 我也试过:

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

但我得到了同样的错误。

想法?

回答

8

一些讨论型会议#symfony通道后我发现了一个解决办法:

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

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

1

我认为你没有得到一个有效的UTF-8字符串。 试图找出为什么有无效的utf8字节块(http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences)。

您可以分析个字节unpackhttps://stackoverflow.com/a/11466734/4469738

+0

我真的不知道如果我收到一个有效的UTF8。输入数据来自外部来源(电子邮件),我只需要显示它。我无法重新格式化它,所以我应该以某种方式逃避它。 – 2015-03-25 22:04:56