2015-03-25 17 views
9

पर Symfony2 JsonResponse utf8 एन्कोडिंग समस्याएं UTF8 वर्णों को लौटने पर मुझे डेबियन स्थिर php5 (5.4.39-0 + deb7u1) पर जेसन रेस्पॉन्स के साथ समस्याएं आ रही हैं।डेबियन स्थिर php-5.4

मैं (+ dfsg -2 5.6.6) और निम्न कोड एक आकर्षण की तरह काम किया डेबियन परीक्षण PHP5 पर कोई ऐप्लिकेशन विकसित:

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

कि $ डेटा DO के रूप में पारित हो जाता है डीबी से प्रतिक्रिया UTF8 वर्ण है कि मैं नियंत्रित नहीं कर सकते हैं। मुझे बस उन्हें प्रदर्शित करना है।

मुझे लगता है कि मैंने 5.4 की एक बग मारा, लेकिन मैं आसानी से इसके आसपास कैसे चल सकता हूं? मैंने कोशिश की थी:

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

लेकिन मैं एक ही त्रुटि मिलती है।

विचार?

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

अन्य अच्छा समाधान का स्वागत है:

उत्तर

8

कुछ चर्चा #symfony चैनल बाद मैं एक समाधान मिल गया। मैं इस समाधान को एक गंदे हैक के रूप में मानता हूं ...

1

मुझे लगता है कि आपको वैध यूटीएफ -8 स्ट्रिंग नहीं मिल रही है। पता लगाने का प्रयास करें, अमान्य utf8 बाइटब्लॉक क्यों हैं (http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences)।

आप unpack साथ बाइट्स का विश्लेषण कर सकते हैं: https://stackoverflow.com/a/11466734/4469738

+0

मैं वास्तव में नहीं जानता कि मैं एक वैध UTF8 प्राप्त कर रहा हूँ है। इनपुट डेटा बाहरी स्रोत (ईमेल) से आ रहा है और मुझे बस इसे प्रदर्शित करना होगा। मैं इसे दोबारा सुधार नहीं सकता, इसलिए मुझे इसे किसी भी तरह से बचाना चाहिए। –