Umlautproblem erkennen
Mario
- webserver
0 Jurik0 Mario
1 Sven Rautenberg0 Mario
Guten Tag,
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.
Trotzdem werden nach wie vor solche oder ähnliche Stringketten abgelegt.
Interessanterweise kann man nach dieser Zeichenkette bei Google suchen und findet x-Seiten, bei denen ähnliche Probleme aufgetaucht sind. Allerdings nirgends eine Lösung.
Vielen Dank für Eure Hilfe,
Mario
Hi Mario
Ich gebe UTF-8 codierte Texte mit Umlauten ein und in der DB landen dann richtige Einträge.
Wie gibst du UTF-8 codierte Texte mit Umlauten denn ein?
Bei dir ist es so:
Dokument ist UTF-8 codiert (HTML, bzw PHP Dokument)
Datenbank ist UTF-8 codiert
DB-Handler weiß es kommt UTF-8 und schreibe es UTF-8 in die DB
Und trotzdem steht in der DB so ein Murks? Eventuell ists ja ein Bot der eine falsche Codierung benutzt ;)
Guck dir das mal an: UTF-8 und mySQL
Hallo Jurik,
vielen Dank für die Antwort und den Link.
Der Hinweis auf den Bot und Deine Überlegungen was alles UTF-8 kodiert ist, hat mir sehr geholfen. ich werde das weiter verfolgen.
Mario
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
Vielen Dank für die Ausführungen zu den Browsern.
Ich nehme an, es ist tatsächlich aussichtslos, Browser (incl. der Bots) auf Ihre Codierschematas gegen zu prüfen.
Ich überlege weiter.
Gruss, Mario
Moin!
Vielen Dank für die Ausführungen zu den Browsern.
Ich nehme an, es ist tatsächlich aussichtslos, Browser (incl. der Bots) auf Ihre Codierschematas gegen zu prüfen.
Eigentlich nur dann, wenn du kein UTF-8 verwendest. Denn mit UTF-8 lösen sich alle diese Probleme weitgehend in Luft auf, da es damit ja keinerlei uncodierbare Zeichen mehr gibt.
- Sven Rautenberg