У меня проблемы с 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;
но я получаю ту же ошибку.
Идеи?
После некоторого обсуждения канала #symfony я нашел обходной путь:
$response = new Response(json_encode($data, JSON_UNESCAPED_UNICODE));
$response->headers->set('Content-Type', 'application/json');
return $response;
Другие хорошие решения приветствуются. Я считаю это решение грязным взломом …
Я думаю, что вы не получаете правильную строку UTF-8.
Попробуй выяснить, почему там недопустимые байтблоки utf8 (http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences).
Вы можете анализировать байты с unpack
: https://stackoverflow.com/a/11466734/4469738