2015-03-25 6 views
9

Ich habe Probleme mit JsonResponse auf Debian Stable php5 (5.4.39-0 + deb7u1) beim Zurückgeben von UTF8 Zeichen.Symfony2 JsonResponse utf8 Codierungsprobleme auf Debian Stable php-5.4

ich eine App auf Debian Testing php5 entwickelt (5.6.6 + dfsg-2) und den folgenden Code wie ein Charme:

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

aber nach Server auf den stabilen prod Bereitstellung begann ich die folgende bekommen Ausnahme für das exakt gleiche DB/Daten charsets etc:

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

Die Antwort von DB, die als $ Daten DO enthält UTF8 Zeichen übergeben, die ich nicht kontrollieren kann. Ich muss sie nur anzeigen.

Ich nehme an, ich habe einen Fehler von 5.4 getroffen, aber wie kann ich es einfach umgehen? Ich habe versucht:

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

aber ich den gleichen Fehler.

Ideen?

Antwort

8

Nach einiger Diskussion über #symfony Kanal fand ich eine Abhilfe:

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

Andere schöne Lösungen sind willkommen. Ich betrachte diese Lösung als einen schmutzigen Hack ...

1

Ich denke, Sie erhalten keine gültige UTF-8-Zeichenfolge. Versuchen Sie herauszufinden, warum es ungültige utf8 byteblocks gibt (http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences).

Sie können den Bytes mit unpack analysieren: https://stackoverflow.com/a/11466734/4469738

+0

Ich weiß nicht wirklich, wenn ich eine gültige UTF8 erhalten. Eingabedaten stammen von externen Quellen (E-Mails) und ich muss sie einfach anzeigen. Ich kann es nicht neu formatieren, also sollte ich es irgendwie vermeiden. –