dedlfix: Türkisch in DB speichern

Beitrag lesen

Tach!

Der Eingabetext wird in meiner Datenbank mySql(V5.1.61) gespeichert, nachdem der Text die Funktion htmlspecialchars() durchlaufen hat.

Was willst du mit HTML-spezifisch kodierten Zeichen in der Datenbank? Dort gehören sie nicht hin, sondern nur in die HTML-Ausgabe.

Das Feld in der Datenbank ist ein Longtext utf8_unicode.
Jetzt wollte ein Nutzer folgenden Text speichern:
Hastalığa karşı değil, Sağlık için…
In meiner Datenbank wurde aber folgedes gespeichert:
Hastalığa karşı değil, Sağlık için…

Vermutlich kam das bereits so vom Browser. Das kannst du mit einer Kontrollausgabe der Eingabedaten überprüfen. Schau dazu aber in die Quelltextansicht, denn die ausgegebenen NCRs werden ja vom Browser in Zeichen gewandelt.

Ich nehme an, dass du deine Webseite nicht in UTF-8 erstellt und so ausgezeichnet hast. Stattdessen wird der Browser von ISO-8859-1 oder so etwas ähnlichem ausgehen. Er versucht dann die Formulareingaben nach ISO-8859-1 (oder was auch immer) zu kodieren, was er aber bei den Nicht-ASCII-Zeichen nicht schafft. Stattdessen nehmen einige Browser die NCRs als Ersatz. Alternativ bekommst du Zeichenverlust meist in Form eines Fragezeichens..

Wie mache ich es richtig, damit die Nutzer auch wie hier z.B. einen türkischen Text speichern können?

Verwende in der gesamten Verarbeitungskette durchgängig UTF-8. Überleg dir, an welchen Stellen die Daten in ein anderes System übergeben werden. Ermittle dann, wie dem Zielsystem die Zeichenkodierung mitgeteilt werden muss. Überzeug dich, dass deine Systeme UTF-8 verstehen können, solange sie die Daten nicht einfach unverändert durchreichen. Und prüfe, dass du auch wirklich UTF-8 weitergibst und empfängst.

Das war die grobe Richtlinie. Der Teufel steckt im Detail, aber dazu kannst du ja Detailfragen stellen, wenn du die Antwort nicht bereits im SELFHTML-Wiki-Bereich zu Zeichenkodierungen findest. Beachte außerdem die Kontextwechsel-Problematik, um die notwendigen kontextspezifischen Schreibweisen nicht an der falschen Stelle anzuwenden.

dedlfix.