Peter: form accept-charset="utf-8"

Beitrag lesen

vor kurzem bin ich auf accept-charset gestoßen und habe gedacht, nachdem meine Site in utf-8 geschrieben ist, dann schreib ich das mal zu meinen form-Elementen.

Das tust du deshalb, damit kein existierender, evtl. älterer Browser auf dumme Gedanken kommt und dir irgendwas anderes schickt. Purer Selbstschutz, damit du sicherstellst, dass du UTF-8 kriegst.

Aber brauche ich das überhaupt?
Ich dachte utf-8 ist so toll barrierefrei und der Zeichensazu enthält eh alle Zeichen?

Das eine hat mit dem anderen nichts zu tun.

Was passiert, wenn jemand nicht utf-8 eingeben würde und ich habe kein accept-charset angegeben?

Niemand gibt "UTF-8" ein. Ein User drückt nur Tasten. Der Computer setzt die Tasten in Zeichencodes um. Das dürfte heutzutage in 99,999% der Fälle in Unicode passieren, d.h. der User kann alle Unicode-Zeichen eingeben (wenn nicht direkt per Taste, dann über irgendeine Tastenkombination, Angabe des Zeichencodes etc.).

Das bedeutet: In deinem Formularfeld landen Unicode-Zeichen. Und die muß der Browser dann an den Server schicken. Dazu muß er eine Codierung wählen.

Wenn deine HTML-Seite in ISO-8859-1 codiert ist und auch im accept-charset drinsteht, dann kann der Browser nur 256 aller vom User eingebbaren Zeichen codieren - der Rest fällt auf irgendeine Weise weg. Wenn hingegen UTF-8 angegeben ist, kann der Browser alle eingebbaren Zeichen zum Server schicken.

Was passiert wenn ich accept-charset angegeben habe; werden die Eingaben einfach vershcluckt?

Wenn du ein Encoding angibst, welches nicht alle Unicode-Zeichen codieren kann (UTF-8, UTF-16, UCS-2, UTF-32, UCS-4, UTF-7), dann fallen alle Zeichen, die nicht in dem Encoding drinstehen, weg.

Manche Browser machen ein Fragezeichen draus. Andere senden dir die numerische Zeichenreferenz. Noch andere schicken dir, obwohl du nur ISO-8859-1 erwartest, die Zeichen dennoch in UTF-8.

Egal, was passiert: Du kriegst ohne Unicode-fähiges Encoding in jedem Fall Müll, den du nicht mehr ohne menschliches Einwirken dekodieren kannst. Deshalb mußt du das unbedingt vermeiden. Die Browser haben derzeit leider noch keinen Mechanismus implementiert, der den Benutzer fragt, was mit seinen im Form-Encoding nicht darstellbaren Zeichen passieren soll - und selbst wenn das der Fall wäre, wüßte die Mehrheit der Benutzer mit der Frage nichts anzufangen. Also warum das Problem provozieren, wenn mit UTF-8 ein problemloser Ausweg bereitsteht?

Was ist, wenn ein Browser keine Eingaben in utf-8 ermöglicht?

Jeder Browser nimmt vom Betriebssystem Tastendrücke entgegen. Die sind in Unicode in einer passenden internen Codierung (aber nicht zwingend in UTF-8). Das heißt: Der Browser muß die Zeichen beim Abschicken sowieso in UTF-8 oder eine andere Codierung konvertieren.