2012-11-28 21 views
11

Ich bekomme Probleme mit Daten aus einer Datenbank mit deutschen Umlauten. Im Grunde genommen ist es immer ein schwarzes Quadrat mit einem Fragezeichen, wenn ich Daten mit Umlauten erhalte. Ich löste das, indem ich vor der AbfrageProbleme mit deutschen Umlauten in PHP json_encode

mysql_query ('SET NAMES utf8') 

setzte.

Das Problem ist, sobald ich json_encode(...) auf ein Ergebnis einer Abfrage verwenden, wird der Wert, der einen Umlaut enthält, null. Ich kann das sehen, indem ich die php-Datei direkt im Browser aufruft. Gibt es eine andere Lösung als diese Zeichen vor der Kodierung zu JSON zu ersetzen und sie in JS zu dekodieren?

Antwort

5

Sie möchten die Texte wahrscheinlich nur irgendwie im Browser anzeigen, also wäre eine Option, die Umlaute in HTML-Entitäten zu ändern, indem Sie htmlentities() verwenden.

Der folgende Test für mich gearbeitet:

<?php 
    $test = array('bla' => 'äöü'); 
    $test['bla'] = htmlentities($test['bla']); 

    echo json_encode($test); 
?> 
+1

Ich benutzte 'utf8_decode (htmlentities ($ row [" name "]))' –

+0

Und ich benutzte utf8_encode ($ returned_html); –

11

Ich weiß, das alt sein könnte, aber hier eine bessere Lösung:

Definieren Sie den Dokumententyp mit utf-8 charset:

<?php header('Content-Type: application/json; charset=utf-8'); ?> 

Stellen Sie sicher, dass der gesamte Inhalt utf_encodiert ist. JSON funktioniert nur mit utf-8!

function encode_items(&$item, $key) 
{ 
    $item = utf8_encode($item); 
} 
array_walk_recursive($rows, 'encode_items'); 

Hoffe, das hilft jemandem.

3

Der einzige wichtige Punkt hier ist, dass json_encode() nur UTF-8-Codierung unterstützt. http://www.php.net/manual/en/function.json-encode.php

Alle Kettendaten müssen UTF-8 codiert werden.

Wenn Sie also Sonderzeichen in einer nicht utf-8-Zeichenfolge haben, gibt json_encode einen Nullwert zurück.

Entweder wechseln Sie das gesamte Projekt zu utf-8 oder Sie stellen sicher, dass Sie utf8_encode() eine beliebige Zeichenfolge vor der Verwendung von json_encode().

0

sicherstellen, dass die Übersetzungsdatei selbst explizit als UTF-8

Nach dass Reload-Cache-Blöcken und Übersetzungen diese hübschen elegante Lösung

7

Check out erwähnt here gespeichert wurde:

json_encode($json_full, JSON_UNESCAPED_UNICODE); 

Wenn die Problem ist nicht irgendwo anders in Ihrem Code das sollte es beheben.