Symfony — проблемы с кодировкой Symfony2 JsonResponse utf8 в стабильной версии Debian php-5.4

У меня проблемы с JsonResponse на Debian Stable php5 (5.4.39-0 + deb7u1) при возврате символов UTF8.

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

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

но после развертывания на стабильном сервере Prod я начал получать следующее исключение для тех же кодировок БД / Данных и т. д.

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, который передается как $ data DO, содержит символы UTF8, которыми я не могу управлять. Я просто должен показать их.

Я предполагаю, что у меня ошибка 5,4, но как я могу легко обойти ее?
Я попробовал:

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

но я получаю ту же ошибку.

Идеи?

10

Решение

После некоторого обсуждения канала #symfony я нашел обходной путь:

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

Другие хорошие решения приветствуются. Я считаю это решение грязным взломом …

9

Другие решения

Я думаю, что вы не получаете правильную строку UTF-8.
Попробуй выяснить, почему там недопустимые байтблоки utf8 (http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences).

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

1

По вопросам рекламы [email protected]