2015-03-25 5 views
9

У меня возникают проблемы с JsonResponse на Debian Stable php5 (5.4.39-0 + deb7u1) при возврате символов UTF8.Проблемы с кодировкой Symfony2 JsonResponse utf8 на Debian Stable php-5.4

Я разработал приложение на Debian Testing php5 (5.6.6 + DFSG-2) и следующий код работает как шарм:

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

но после развертывания на стабильный сервер прод я начал получать следующее исключение для тех же наборов символов 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)"} [] 

ответ от БД, который передается как $ данных 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).

Вы можете анализировать байты с unpack: https://stackoverflow.com/a/11466734/4469738

+0

Я действительно не знаю, если я получаю действительный UTF8. Входные данные поступают из внешнего источника (электронные письма), и я просто должен его отображать. Я не могу переформатировать его, поэтому я должен как-то сбежать от него. –