2016-04-30 22 views
6
codice

mio php si presenta così:PHP print_r funziona, ma json_encode ritorna vuota

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

Il che mi dà il seguente output:

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

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

) 

Questa uscita è il risultato di una query per e-mail, per restituire il nome del prodotto. In questo caso, se cambio print_r con echo json_encode non viene visualizzato nulla. Questo mi fa pensare che il problema ha a che fare con il set di caratteri, dato che il risultato non è vuoto, così ho aggiunto:

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

Ancora nessuna fortuna. Ho letto che potrebbe essere il caso che le funzioni di JSON * siano disabilitate, tuttavia, se cambio l'email dalla mia query, visualizza il risultato come sopra usando print_r e come json usando echo json_encode perfettamente bene. Deve essere da questo risultato la radice del problema o uno scenario simile. Può essere dovuto al carattere ä dal risultato? Ecco perché ho aggiunto utf-8 nell'intestazione.

Come ho detto sopra, se cambio l'email funziona, ma mostra solo 1 risultati invece 2 quando uso "[email protected]". Può essere che i risultati non siano inseriti correttamente nell'array? Credo che non sia dato che il formato formuli correttamente il risultato della query.

Qualcuno sa cosa sta succedendo?

+0

Qual è l'output di 'var_dump ($ array_1) '? var_dump è sempre più utile per il debug;) –

+0

Prova '$ json_string = json_encode ($ array_1); var_dump ($ json_string); ' – Brian

+0

Entrambi, var_dump ($ array); quindi echo json_encode ($ array); Non c'è motivo per cui non funzioni. Se una funzione non esiste, si ottiene un avviso/errore che si sta utilizzando una funzione che non esiste. Assicurati di mostrare tutti gli avvisi usando error_reporting (E_ALL); – Loenix

risposta

5

json_encode supporta solo le stringhe UTF-8 codificato, in modo da dovrete codificare i valori order_item_name utilizzando htmlentities o utf8_encode

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

print json_encode($array1); 

Per maggiori informazioni visita problems with german umlauts in php json_encode

+0

Questo ha fatto il trucco. Grazie mille! –

Problemi correlati