• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Unicode probleme - in DB und wieder korrekt auslesen

marlbi

New member
Hallo!

Habe da leider folgendes Problem und komme nicht weiter :confused:

Ich habe eine MySql Tabelle welche ein Wort in verschiedenen Sprachen speichern soll (Eng, Dansk, Russ).
Die Datenbank selber fülle ich über ein Formular (PHP Datei).

Nur bei den russischen Texten, wenn ich diese wieder auslesen, sind einige Zeichen anders. Also eben die Kyrülischen (oder wie das heist) Zeichen funktiuonieren nicht (aber nicht alle).

Hier alle Infos die meiner Meinung dazu wichtig sind.
Die HTML Datei ist so kodiert:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Das Feld in der Datenbank ist auf "utf8_unicode_ci" (in MyAdmin steht da als Überschrift "Kollation")
Habe es auch schon mit "utf8_bin" versucht und einigen anderen mehr, aber nichts hat funktioniert.

Wenn ich den russischen Text einfach so in die HTML schreibe funktioniert das einwandfrei, denke mal das es nicht an der Codierung der HTML (PHP) Datei liegt.

Der russische text als Beispiel: Расстояние до города
Die 2 "c" nach "Pa" die werden z.B. anders dann angezeigt beim auslesen.

Vielleicht hat ja wer eine Idee bzw. hat sich schon einmal wer mit solch einen Problem beschäftigt.

Besten Dank im vorraus!

Grüße Marlbi
 
Die Kollation hat mit der Zeichenkodierung in der Tabelle nichts zu tun. Sie bestimmt lediglich die Sortierreihenfolge (also z.B. ob "Ähre" vor "Apfel" steht oder nicht). Die eigentliche Zeichenkodierung lässt sich beim Anlegen der Tabelle festlegen. Nachträglich kannst du das über den Befehl "ALTER TABLE tabellenname CONVERT TO CHARACTER SET utf8" machen.

Beim Auslesen aus einer Unicode-Tabelle solltest du vor der eigentlichen "SELECT" Anfrage ein "SET NAMES utf8" an MySQL schicken. Es reicht, das ein einziges Mal zu tun (z.B. Direkt nach dem mysql_connect).

Die Funktion utf8_encode kodiert lediglich von iso-8859-1 nach utf-8. Sonderzeichen, die in iso-8859-1 nicht enthalten sind (z.B. Kyrillische Zeichen) werden davon also nicht beeinflusst.

Ein Tipp am Rande: Wenn du mit Unicode arbeitest, ist es ratsam auch alle HTML- und PHP-Seiten in utf-8 zu speichern. Das hat den Vorteil, dass du Umlaute und Sonderzeichen nicht explizit kodieren musst.
 
Also!

1A die Infos :grin:

Habe zwar ein wenig rumbasteln müssen aber jetzt hauts hin!

Die Codierung der HTML / PHP dateien - klar auf UTF8
Dann der "SET NAME utf8" WICHTIG!
Und dann mit utf8_encode & utf8_decode

Alles einwandfrei, komme jetzt mit Dänischen, Norwegischen Sonderzeichen und Kyrillisch zurecht!

Herzlichen Dank, ich währe da wahrscheinlich nie dahintergekommen!

Grüße Marlbi
 
Noch ein Nachtrag!

Also nach weiteren Tests, bin ich daraufgekommen, das es reicht den DB Befehl "SET NAME utf8" am Anfang durchzuführen. Das wars. Man braucht danach nicht mehr utf8_encode & utf8_decode. Man kann dann ganz normal weiterarbeiten!

Grüße Marlbi
 
Zurück
Oben