2015-03-25 92 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