2016-04-30 15 views
6

Benim php kodu şöyle verir:PHP, ancak json_encode boş

$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); 

bana şu çıktıya verir hangisi:

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

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

) 

Bu çıkış e-posta ile bir sorgunun sonucudur, ürünün adını iade etmek için. Bu durumda, print_r'u echo json_encode ile değiştirirsem hiçbir şey görüntülenmez. Bu bana sorun sonuç boş olmadığından emin verilen karakter seti ile ilgisi var olduğuna inanıyoruz yapar, bu yüzden ekledi: Hala

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

şans yok. Bunun benim sorgudan e-postayı değiştirmek eğer print_r kullanarak yukarıdaki ve echo json_encode mükemmel iyi kullanarak json olarak sonucu görüntüler, ancak, json * işlevleri devre dışıdır durum olabileceğini okuma. Bu sonuçtan, sorunun kökü veya benzer bir senaryonun olması gerekir. Sonuçtan ä karakterinden dolayı olabilir mi? Bu yüzden başlıkta utf-8 ekledim.

Ben çalıştığını e-posta değiştirmek, ama "[email protected]" kullandığınızda yerine 2 sadece 1 sonuçları göstermektedir eğer, yukarıda belirttiğimiz gibi. Sonuçların dizide doğru şekilde yerleştirilmemesi olabilir mi? print_r'un sorgu sonucunu doğru şekilde biçimlendirmediğine inanıyorum.

Neler olup bittiğini bilen var mı?

+0

bkz kullanarak order_item_name değerlerini kodlamak gerekecek ($ array_1) '? var_dump hata ayıklamak için her zaman daha yararlıdır;) –

+0

Deneme $ json_string = json_encode ($ dizi_1); var_dump ($ json_string); – Brian

+0

İkisini de yapın, var_dump ($ dizi); daha sonra echo json_encode ($ dizi); Çalışmaması için bir sebep yok. Bir işlev mevcut değilse, varolmayan bir işlev kullandığınız bir uyarı/hata alırsınız. Error_reporting (E_ALL) kullanarak tüm uyarıları görüntülediğinizden emin olun; – Loenix

cevap

5

json_encode sadece UTF-8 kodlu dizeleri destekler, böylece `var_dump çıktısı nedir ya htmlentities veya daha fazla bilgi için

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

print json_encode($array1); 

utf8_encodeproblems with german umlauts in php json_encode

+0

Bu hile yaptı. Size çok teşekkür ederim! –