2011-11-15 13 views
11

मैं हिब्रू में कुछ पाठ के साथ डेटाबेस से पढ़ रहा हूँ और json_encode के लिए यह कोशिश कर के बजाय इस शो के अशक्त। अगर मैं परिणाम print_r मैं मिलता है:php json_encode() पाठ

Array 
(
    [0] => Array 
     (
      [value] => 88 
      [text] => כיתה א' 
      [parent_id] => 1 
      [level] => 1 
     ) 

    [1] => Array 
     (
      [value] => 89 
      [text] => כיתה ב' 
      [parent_id] => 1 
      [level] => 1 
     ) 

    [2] => Array 
     (
      [value] => 91 
      [text] => כיתה ג' 
      [parent_id] => 1 
      [level] => 1 
     ) 

) 

जबकि json_encode पता चलता है:

[{"value":"88","text":null,"parent_id":"1","level":"1"},{"value":"89","text":null,"parent_id":"1","level":"1"},{"value":"91","text":null,"parent_id":"1","level":"1"}] 

मैं belive क्योंकि डेटाबेस से अपने पाठ एक (') चिह्न है यह है। ने स्ट्रिप्सलाश के विभिन्न संयोजन या real_escape_string को किसी भी मदद की कोशिश नहीं की है।

+0

यह ' '' बोली नहीं है निष्पादित करने से पहले यह अधिकार का उपयोग करें। यह सबसे अधिक संभावना है कि आपका टेक्स्ट एन्कोडिंग यूटीएफ -8 नहीं है। या कौन सा अक्षरसेट डेटाबेस टेबल करता है? – mario

+0

आप किस चरित्र एन्कोडिंग का उपयोग कर रहे हैं? यह मुद्दा निश्चित रूप से लापता होने के साथ दिखता है, ऐसा लगता है कि आपको डीटी से डेटा को यूटीएफ -8 –

+0

पर एन्कोड करके साफ करना होगा, json_encode केवल दस्तावेज़ों के अनुसार utf-8 तारों के साथ काम करता है। 'json_last_error()' के आउटपुट की जांच करें। http://php.net/json-last-error। json_encode को कॉल करने से पहले utf8 अपने तारों को एन्कोड करें। –

उत्तर

19

json_encode उम्मीद डेटा में तार UTF-8 के रूप में एन्कोड किया जाना है।

$results = array_map(function($r) { 
    $r['text'] = utf8_encode($r['text']); 
    return $r; 
}, $results); 
echo json_encode($results); 
+0

अब यह मुद्रित है: [{"मान": "88", "पाठ": "\ u00eb \ u00e9 \ u00fa \ u00e4 \ u00e0 '", "parent_id": "1", "स्तर": "1"}, { "मान": "89", "पाठ": "\ u00eb \ u00e9 \ u00fa \ u00e4 \ u00e1 '", "parent_id": "1", "स्तर": "1"}, {"मान": "9 1 "," पाठ ":" \ u00eb \ u00e9 \ u00fa \ u00e4 \ u00e2 '"," parent_id ":" 1 "," स्तर ":" 1 "}] क्या यह ऐसा माना जाता है? मैं इसे पाठ के रूप में देखने के लिए तैयार नहीं हूँ? –

+1

@ eric.itzhak हां, यह वैध JSON है। यदि आप इसे फिर से पार्स करते हैं, तो यूनिकोड से बचने के लिए उचित यूटीएफ -8 स्ट्रिंग्स में मैप किया जाएगा। यदि आप चाहते हैं कि JSON इन भागने में शामिल न हो, तो 'JSON_UNESCAPED_UNICODE' विकल्प' json_encode' (केवल php 5.4+) पर दें। ध्यान दें कि यूनिकोड से बचने से आपके JSON को 8 बिट-अपारदर्शी चैनलों (यानी प्रोग्राम जो एन्कोडिंग के साथ सही ढंग से सौदा नहीं करते हैं) के माध्यम से पार करने की अनुमति देता है। जब आप 'JSON_UNESCAPED_UNICODE' निर्दिष्ट करते हैं तो आप इसे खो देते हैं। – phihag

+0

धन्यवाद फिहाग! आप एक जीवन बचतकर्ता हैं :) –

0

json_encode($string, JSON_UNESCAPED_UNICODE); (केवल पीएचपी v5.4.0 + के लिए - docs देखें) की कोशिश करो।

+0

यदि आप इस विधि का उपयोग करते हैं तो आपको हेडर जोड़ने की आवश्यकता होगी। [Json_encode() को अमान्य वर्णों के साथ स्ट्रिंग छोड़ने से कैसे रोकें] (http: // stackoverflow।कॉम/प्रश्न/4663743/कैसे-से-रखने-जेसन-एन्कोड-से-ड्रॉप-स्ट्रिंग-अमान्य-वर्णों के साथ) 'हेडर (' सामग्री-प्रकार: एप्लिकेशन/जेसन; वर्णसेट = utf-8 '); ' – Wingman1487

1
$dbh = new PDO('mysql:host=localhost;dbname=test', 
       $user, 
       $pass 
      ); 

$dbh->exec("SET CHARACTER SET utf8"); 

या

$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", 
       $dbuser, 
       $dbpass, 
       array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
      ); 
0
function change_null($d) 
{ 
    if (is_array($d)) { 
     foreach ($d as $k => $v) { 
      $d[$k] = change_null($v); 
     } 
    } else if(is_null($d)) 
    { 
     return ''; 
    } 
    return $d; 
} 
था: यदि पहले से नहीं कर रहे हैं

UTF-8 में उन्हें कन्वर्ट

यह रिकर्सिव फ़ंक्शन शून्य मानों को खाली स्ट्रिंग में बदल देगा। Json_encode ($ your_array) को json_encode (change_null ($ your_array) पर कॉल करते समय;

0

सबसे आसान तरीका में से एक MySQL क्वेरी के लिए CHARSET शामिल किया जाए। यदि आप अपने सभी प्रश्नों के लिए एक ही वर्णमाला सेट करना चाहते हैं, तो बस अपनी कॉन्फ़िगरेशन या डेटाबेस कनेक्शन फ़ाइल में निम्न जोड़ें।

mysql_query('SET CHARACTER SET utf8'); 

आप न केवल विशिष्ट प्रश्नों पर यह चाहते हैं, तो बस अपने प्रश्नों

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