2016-11-17 4 views
0

Bin mit mysql und PHP.Seltsame Zeichen beim Lesen von Daten aus MySQL Tabelle

In meiner Datenbank habe ich Spaltenwert wie folgt.

Preaqueça o forno médio (180ºC). 

Aber wenn ich es mit PHP abrufen, zeigt es unten Zeichenfolge.

Preaqueu00e7a o forno mu00e9dio (180u00baC). 

Mit der Zeichencodierung stimmt etwas nicht. Irgendwelche Ideen, um es zu beheben?

+0

stellen Sie sicher, dass alle Ihre Systeme die richtige Kodierung verwenden (wahrscheinlich UTF)? –

+0

share code von wo Sie abrufen und anzeigen? – C2486

+1

Ihre Tabellenkonfiguration gehört zu diesem DEFAULT CHARSET = utf8 – Karthi

Antwort

0

Ich benutzte json_encode, um die Ausgabe von ausgewählter Abfrage anzuzeigen. Das verursachte das Problem.

function my_json_encode($arr) 
{ 
     //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding 
     array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); }); 
     return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); 

} 

Verwendet diese Funktion anstelle der Standard json_encode.And es funktioniert perfekt.

0

Sie scheinen zwei Probleme zu haben.

ç ist Mojibake für ç und º ist Mojibake für º. Dafür müssen Sie überprüfen.

sichtbar)

  • Das Bytes gespeichert werden müssen UTF-8-codiert sein. Repariere das.
  • Die Verbindung beim Einfügen und Auswählen von Text muss utf8 oder utf8mb4 angeben. Repariere das.
  • Die Spalte muss CHARACTER SET utf8 (oder utf8mb4) deklariert werden. Repariere das.
  • HTML sollte mit beginnen.

Hex 00e7 sieht aus wie die „Unicode-Codepunkt“ für ç, aber es ist unklar, wie Sie das schaffen können.

Beginnen wir mit SELECT col, HEX(col) FROM ... zu sehen, was gespeichert wurde. Stellen Sie auch SHOW CREATE TABLE bereit. (Weitere Details unter Test the data.)

Nachdem Sie die Mojibake-Probleme behoben und den HEX-Befehl ausgeführt haben, beginnen Sie eine neue Frage. (Ich befürchte, dass dieser Thread zu unordentlich wird, um zu behalten.)