2013-02-20 13 views
8
$test = json_encode('بسم الله'); 
echo $test; 

इस कोड के परिणामस्वरूप, आउटपुट है: "\u0628\u0633\u0645 \u0627\u0644\u0644\u0647" जबकि यह "بسم الله" जैसा होना चाहिए। यूट्यूब एपीआई में जेएसओएन एन्कोड किए जाने पर अरबी अक्षरों को एन्कोड किया जाता है, यह मामला नहीं है: http://gdata.youtube.com/feeds/api/videos/RqMxTnTZeNE?v=2&alt=jsonJSON डिकोडिंग में अरबी वर्ण

आप यूट्यूब में देख सकते हैं कि अरबी वर्ण ठीक से प्रदर्शित होते हैं। मेरी गलती क्या हो सकती है?

एचआईएनटी: मैं एपीआई < पर काम कर रहा हूं उदाहरण उदाहरण के लिए सिर्फ स्पष्टीकरण के लिए है।

+3

आप json_encode का उपयोग किए बिना अरबी वर्ण दिखा सकते हैं, तो क्यों आप इन json_encode पात्रों की कोशिश करना चाहते हैं? – haitaka

+0

अरबी पाठ –

+0

के लिए Google इनपुट उपकरण का उपयोग करें मैं एक एपीआई पर काम कर रहा हूं, यही कारण है कि मैं json_encode –

उत्तर

20

"\u0628\u0633\u0645 \u0627\u0644\u0644\u0647" और "بسم الله" JSON में समकक्ष हैं।

PHP मल्टीबाइट वर्णों के लिए अक्षर के बजाय यूनिकोड एस्केप का उपयोग करने के लिए बस डिफ़ॉल्ट है।

आप अन्यथा JSON_UNESCAPED_UNICODE (जो आप PHP 5.4 या बाद में उपयोग कर रहे हैं) के साथ अन्यथा निर्दिष्ट कर सकते हैं।

json_encode('بسم الله', JSON_UNESCAPED_UNICODE); 
+1

बस ठीक काम करता है। –

+0

मेरा होस्ट अभी तक PHP 5.4 का समर्थन नहीं करता है! वैसे भी धन्यवाद :) –

+0

शानदार! वह काम किया। –

2

यह यूटीएफ -8 स्ट्रिंग का सही JSON एन्कोडेड संस्करण है। इसे बदलने की कोई आवश्यकता नहीं है, यह सही स्ट्रिंग का प्रतिनिधित्व करता है। JSON में वर्ण इस तरह से बच सकते हैं।

JSON यदि आप चाहें तो सीधे यूटीएफ -8 अक्षरों का प्रतिनिधित्व कर सकते हैं। पीएचपी 5.4 जब से तुम JSON_UNESCAPED_UNICODE ध्वज सेट करने के लिए कच्चे UTF-8 तार का उत्पादन करने का विकल्प है:

json_encode($string, JSON_UNESCAPED_UNICODE) 

लेकिन वह केवल एक प्राथमिकता है, यह आवश्यक नहीं है।

<?php 

$test = json_encode('بسم الله', JSON_UNESCAPED_UNICODE); 
echo $test; 

इस ध्वज की आवश्यकता है PHP/5.4:

char 
    any-Unicode-character- 
     except-"-or-\-or- 
     control-character 
    \" 
    \\ 
    \/ 
    \b 
    \f 
    \n 
    \r 
    \t 
    \u four-hex-digits 

आप unencoded संस्करण पसंद करते हैं, बस JSON_UNESCAPED_UNICODE झंडा जोड़ें:

2

दोनों प्रारूपों वैध और बराबर JSON तार कर रहे हैं 0 या अधिक।

2

ठीक है, जैसा कि इससे पहले उल्लेख किया गया है इससे कोई फर्क नहीं पड़ता, क्योंकि दोनों स्ट्रिंग बराबर हैं। आपको क्या करना चाहिए हालांकि यह सुनिश्चित कर लें कि एन्कोडेड स्ट्रिंग को आउटपुट भेजने से पहले डीकोड किया गया हो।

echo json_decode($test); 

या क्योंकि JSON सबसे अधिक संभावना सिर्फ एक स्ट्रिंग की तुलना में अधिक होते हैं:

$obj['arabic'] = 'بسم الله'; 
$obj['latin'] = 'abcdef'; 
$obj['integer'] = 12345; 

$test = json_encode($obj); 

$testobject = json_decode($test); 
echo $testobject['arabic']; 
संबंधित मुद्दे