Werte in UTF-8 kodiert wird als NULL-Wert in JSON

Habe ich eine Reihe von keywords, die durchfahren werden über JSON aus der DB (codierte UTF-8), von denen einige möglicherweise Sonderzeichen wie é, è, ç, usw.. Dies ist als Teil eines auto-completer. Beispiel:

array('Coffee', 'Cappuccino', 'Café');

Sollte ich hinzufügen, dass das array, wie es kommt aus der DB wäre:

array('Coffee', 'Cappuccino', 'Café');

Aber JSON-kodiert als:

["coffee", "cappuccino", null];

Wenn ich drucken Sie diese per print_r(), zeigen Sie sich problemlos auf einem UTF-8-codierten Webseite, aber café kommt durch als "café" wenn "text/plain" wird verwendet, wenn ich will, zu betrachten Sie das array mit print_r($array);exit();.

Wenn ich encode mit utf8_encode() vor der Codierung zu JSON, kommt es durch Ordnung, aber was wird gedruckt, auf der Webseite ist "café" und nicht "café".

Auch seltsam, aber json_last_error() wird gesehen als eine Undefinierte Funktion, aber json_decode() und die Funktionen json_encode() funktionieren.

Irgendwelche Ideen auf, wie man UTF-8-kodierte Daten aus der Datenbank zu Verhalten, während des gesamten Prozesses?

EIDT: Hier ist die PHP-Funktion packt die Schlüsselwörter und stellt Sie in einem einzigen array:

private function get_keywords() 
{
    global $db, $json;

    $output = array();

    $db->query("SELECT keywords FROM listings");

    while ($r = $db->get_array())
    {
        $split = explode(",", $r['keywords']);

        foreach ($split as $s)
        {
            $s = trim($s);
            if ($s != "" && !in_array($s, $output)) $output[] = strtolower($s);
        }
    }

    $json->echo_json($output);
}

Json::echo_json Methode nur kodiert, legt die header und druckt es (für die Verwendung mit Prototyp)

EDIT: DB-Verbindungs-Methode:

function connect()
{

    if ($this->set['sql_connect'])
    {
        $this->connection = @mysql_connect( $this->set['sql_host'], $this->set['sql_user'], $this->set['sql_pass'])
                OR $this->debug( "Connection Error", mysql_errno() .": ". mysql_error());
        $this->db = @mysql_select_db( $this->set['sql_name'], $this->connection)
                OR $this->debug( "Database Error", "Cannot Select Database '". $this->set['sql_name'] ."'");

        $this->is_connected = TRUE;
    }

    return TRUE;
}

Mehr Updates:
Einfaches PHP-script, das ich ran:

echo json_encode( array("Café") ); //["Caf\u00e9"]
echo json_encode( array("Café") ); //null
  • json_last_error() wurde in 5.3.0 zu können, müssen Sie eine frühere version. So zumindest diese Fremdheit ist, erklärte jetzt 🙂
  • Danke. Ich kam nur über diesen Fehler, wenn Sie versuchen, um herauszufinden, warum codierte Daten kodiert wird als NULL.
  • Kann man den code für echo_json?
InformationsquelleAutor mwieczorek | 2010-09-12
Schreibe einen Kommentar