Mario: Umlautproblem erkennen

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

  1. 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

    1. 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

  2. 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."
    1. 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

      1. 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

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