2015-12-01 5 views
5

मुद्दा यह है कि मैं response()->json() विधि में किसी भी रूसी प्रतीकों का उपयोग नहीं कर सकता। बीओएम बिना कनवर्टरक्या लुमेन (लैरवेल द्वारा) में सिरिलिक प्रतीकों का उपयोग करना संभव है?

mb_detect_encoding('тест'); // returns 'UTF-8' 

इसके अलावा, अपनी सभी फ़ाइल किया गया है UTF-8 में:

return response()->json(['users' => 'тест']); 

and 

return response()->json(['users' => mb_convert_encoding('тест', 'UTF-8')]); 

and 

return response()->json(
     ['users' => mb_convert_encoding('тест', 'UTF-8')]) 
     ->header('Content-Type', 'application/json; charset=utf-8'); 

मैं डिफ़ॉल्ट एन्कोडिंग देख लिया है: मैं पहले से ही निम्नलिखित कोड की कोशिश की है। मैंने डिफ़ॉल्ट चरित्र सेट को .htaccess फ़ाइल (AddDefaultCharset utf-8) में भी जोड़ा है।

लेकिन, मैं अभी भी यहाँ की तरह गलत प्रतिक्रिया मिल:

{"users":"\u0442\u0435\u0441\u0442"} 
+0

आपको क्यों लगता है कि यह गलत प्रतिक्रिया है? –

+0

मेरा मतलब है कि यह मेरे लिए गलत है))। मैं उम्मीद करता हूं कि '{'उपयोगकर्ता': 'тест'}' – Sergey

+0

'u0442'' t' –

उत्तर

7

प्रतिक्रिया है कि आप हो रही है:

{"users":"\u0442\u0435\u0441\u0442"} 

मान्य JSON है!

कहा जा रहा है, यदि आप UTF-8 वर्ण एन्कोड करने के लिए नहीं करना चाहते, तो आप बस सिर्फ इस कर सकते हैं:

$data = [ 'users' => 'тест' ]; 
$headers = [ 'Content-Type' => 'application/json; charset=utf-8' ]; 

return response()->json($data, 200, $headers, JSON_UNESCAPED_UNICODE); 

उत्पादन तो

{"users":"тест"} 

होगा क्यों इस काम?

response() सहायक कॉलिंग Illuminate\Routing\ResponseFactory का उदाहरण देगा। ResponseFactory के json समारोह निम्नलिखित हस्ताक्षर हैं:

public function json($data = [], $status = 200, array $headers = [], $options = 0)

कॉलिंग json()Illuminate\Http\JsonResponse का एक नया उदाहरण पैदा करेगा, जो वर्ग अपने डेटा के लिए json_encode चलाने के लिए जिम्मेदार होगा।

json_encode($data, $this->jsonOptions); 

आप documentation on php.net for the json_encode function और documentation on php.net for the json_encode Predefined Constants पर देख सकते हैं, JSON_UNESCAPED_UNICODE सचमुच multibyte यूनिकोड वर्ण सांकेतिक शब्दों में बदलना होगा (डिफ़ॉल्ट: JsonResponse में setData समारोह के अंदर, अपने सरणी $optionsresponse()->json(...) कॉल पर उपलब्ध कराई के साथ इनकोडिंग किया जाएगा \ uXXXX के रूप में बचने के लिए है)।

यह ध्यान रखना महत्वपूर्ण है कि JSON_UNESCAPED_UNICODE केवल PHP 5.4.0 के बाद से समर्थित है, इसलिए सुनिश्चित करें कि आप 5.4.0 या इस का उपयोग करने के लिए नए हैं।

+0

लुमेन php <5.4 के साथ काम नहीं करता है, शायद इसे 5.5 की आवश्यकता है।शुरुआत से 9 (हालांकि संगीतकार बाधा हाल ही में जोड़ा गया था) – tacone

+0

स्पष्टीकरण @timgws के लिए धन्यवाद! यह वास्तव में अच्छा जवाब है! – Sergey

+0

@tacone आप सही हैं कि लुमेन PHP> = 5.5.9 के साथ काम नहीं करता है, लेकिन PHP <5.4.0 के लिए नोट json_encode से संबंधित है, और सीधे लैरवेल ढांचे के लिए नहीं है। – timgws

संबंधित मुद्दे