Sven Rautenberg: Umlautproblem erkennen

Beitrag lesen

Moin!

ich habe ein öffentliches Formular. In der DB werden ab und zu solche

rö

Strings abgelegt. Mein erster Verdacht war, das jemand UTF-8 codierte Inhalte eingegeben hat, bei denen dann in der DB die Umlaute falsch codiert abgelegt worden sind.

Also lasse ich das Formular auf UTF-8 prüfen und konvertiere es notfalls.

Bei meinen Testversuchen habe ich keine Probleme. Ich gebe UTF-8 codierte Texte mit Umlauten ein und in der DB landen dann richtige Einträge.

Du bringst hier vermutlich etliche Dinge durcheinander.

Wenn du ein "Formular" hast, also ein Eingabefeld einer HTML-Seite, dann kannst du dort keine UTF-8 codierten Umlaute eingeben. Du kannst nur Umlaute eingeben. Die Kodierung übernimmt der Browser beim Absenden.

Deshalb ist interessant, welche Kodierung der Browser verwendet.

Aus welchen gemeinten Zeichen deine Zeichenkette besteht, kann man bis jetzt jedenfalls nur raten.

Allerdings ist eins zu beachten: Man kann in das Formularfeld alle Unicode-Zeichen eingeben - wenn der Browser diese Zeichen aber nicht im gewünschten Schema codieren kann, passiert Mist. Standard sollte eigentlich sein, den Benutzer drauf hinzuweisen, dass er Zeichen eingegeben hat, die nicht versendet werden dürfen. Aber welcher Benutzer kennt sich damit schon aus.

Deshalb wandeln alle Browser uncodierbare Zeichen. Dummerweise nicht einheitlich. Einige machen schlichte Fragezeichen "?" aus solchen Zeichen (das Zeichen ist dann verloren). Andere machen eine numerische Zeichenreferenz "Ӓ" draus (damit könnte man zwar theoretisch das Zeichen wiederherstellen, aber diese Zeichenreferenz unterscheidet sich nicht von den manuell eingegebenen Zeichen einer Zeichenreferenz, es ist also absolut nicht eindeutig, ob jetzt das eigentliche Zeichen gemeint ist). Noch andere wechseln einfach das Codierschema und codieren das Zeichen dann nach diesem neuen Schema, aber ohne das mitzuteilen (beliebt: statt ISO-8859-1 ohne Eurozeichen wird gern Windows-1252 (mit Eurozeichen an Position 0x80) verwendet - sehr übel, wenn das dann wieder in einer ISO-Webseite auftaucht).

Trotzdem werden nach wie vor solche oder ähnliche Stringketten abgelegt.

Hast du die Möglichkeit in Betracht gezogen, dass dir da irgendein Bot chinesischen Spam vorgefertigt als UTF-8-Bytes schickt, obwohl dein Browserformular ansonsten alles korrekt macht?

Interessanterweise kann man nach dieser Zeichenkette bei Google suchen und findet x-Seiten, bei denen ähnliche Probleme aufgetaucht sind. Allerdings nirgends eine Lösung.

Das deutet doch eigentlich in diese Richtung.

- Sven Rautenberg

--
"Love your nation - respect the others."