2016-04-30 5 views
6

मेरे php कोड इस तरह दिखता है:पीएचपी print_r काम करता है, लेकिन json_encode रिटर्न खाली

$header = "Content-Type: application/json"; 
header($header); 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 

    die("Connection failed: " . $conn->connect_error); 

} 

$sql = "SELECT * ..."; 

$result = $conn->query($sql); 

$array_1 = array(); 

if ($result->num_rows > 0) { 

    // output data as array 
    while($row = $result->fetch_assoc()) { 

     array_push($array_1, $row); 

    } 
} 

$conn->close(); 

print_r($array_1); 

कौन मेरा पीछा ouput देता है:

Array 
(
    [0] => Array 
     (
      [user_email] => [email protected] 
      [order_item_name] => Abonnement 
     ) 

    [1] => Array 
     (
      [user_email] => [email protected] 
      [order_item_name] => Verlängerung 
     ) 

) 

यह आउटपुट ईमेल द्वारा एक प्रश्न का परिणाम है, उत्पाद का नाम वापस करने के लिए। इस मामले में, यदि मैं print_recho json_encode के साथ बदलता हूं तो कुछ भी दिखाई नहीं देता है। यह मुझे विश्वास है समस्या यह देखते हुए कि परिणाम खाली नहीं है चारसेट से कोई लेना देना नहीं है बनाता है, तो मैं कहा:

$header = "Content-Type: application/json; charset=utf-8"; 
header($header); 

फिर भी प्रयास विफल। मैं पढ़ रहा हूं कि यह मामला हो सकता है कि जेसन * फ़ंक्शंस अक्षम हैं, हालांकि, अगर मैं अपनी क्वेरी से ईमेल बदलता हूं तो यह print_r और echo json_encode का उपयोग कर जेसन के रूप में परिणाम दिखाता है। यह इस परिणाम से समस्या की जड़, या किसी भी समान परिदृश्य से होना चाहिए। क्या यह परिणाम ä के परिणाम से हो सकता है? यह है कि मैंने हेडर में utf-8 क्यों जोड़ा।

जैसा कि मैंने उपरोक्त कहा है, अगर मैं ईमेल बदलता हूं तो यह काम करता है, लेकिन यह "[email protected]" का उपयोग करते समय केवल 1 परिणाम दिखाता है। क्या यह हो सकता है कि परिणाम सरणी में सही ढंग से नहीं डाले गए हैं? मुझे विश्वास नहीं है कि print_r क्वेरी परिणाम सही ढंग से स्वरूपित करता है।

क्या किसी को पता है कि क्या हो रहा है?

+0

देखने का उपयोग कर क्या 'var_dump का उत्पादन होता है अपने order_item_name मूल्यों सांकेतिक शब्दों में बदलना होगा ($ array_1) '? var_dump डीबग करने के लिए हमेशा अधिक सहायक होता है;) –

+0

'$ json_string = json_encode ($ array_1) आज़माएं; var_dump ($ json_string); ' – Brian

+0

दोनों, var_dump ($ array) करें; फिर json_encode ($ सरणी) गूंजें; कोई कारण नहीं है कि यह काम नहीं करता है। यदि कोई फ़ंक्शन मौजूद नहीं है, तो आपको एक फ़ंक्शन का उपयोग कर एक चेतावनी/त्रुटि मिलती है जो यह मौजूद नहीं है। सुनिश्चित करें कि आप error_reporting (E_ALL) का उपयोग करके सभी चेतावनी प्रदर्शित करते हैं; – Loenix

उत्तर

5

json_encode केवल UTF-8 एन्कोडेड तार का समर्थन करता है, तो आप या तो htmlentities या utf8_encode

foreach($array1 as &$v) { 
    $v['order_item_name'] = utf8_encode($v['order_item_name']); 
} 

print json_encode($array1); 

अधिक जानकारी के लिए problems with german umlauts in php json_encode

+0

यह चाल है। बहुत बहुत धन्यवाद! –

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