Sunday, 22. April 2007

Zeichenkodierung bei Formulardaten

Problemstellung: Die Daten eines Formulares, welches in eine ISO-8859-1 enkodierte Seite eingebettet ist, soll UTF-8 kodiert an eine (andere) URL gesendet werden.

Browser submitten in der Regel ihre Formulardaten stets in dem Encoding, in welchem die Seite gerendert wurde [quelle]. Mit dem Attribut accept-charset sollte man eigentlich das Encoding explizit angeben können, aber leider wird es vom IE nicht korrekt unterstützt. Der IE sendet nämlich das Formular nur dann in UTF-8, falls auch ein Sonderzeichen im Formular mit eingegeben wurde. Server-seitig kann man sich also nicht sicher sein, in welcher Kodierung die Daten übermittelt wurden.

Die IE-Entwickler haben aber seit dem IE 5 nun folgenden Workaround implementiert: Falls das Formular ein hidden-input-Feld namens _charset_ enthält, so wird dieses mit dem verwendeten Enkoding ausgefüllt an den Server mitgesendet.
<form action=".." method="POST" accept-charset="UTF-8">
  <input type="hidden" name="_charset_" value="" />
  ..
</form>
Nun muss man server-seitig dieses Hidden-Field abfragen, und entsprechend auf die mitgesandten Daten anwenden.

Das genaue IE-Verhalten lässt sich hier nachlesen: https://bugzilla.mozilla.org/show_bug.cgi?id=18643#c12

Der IE ist also noch immer für Überraschungen gut. Seufz.

Nachtrag: Die Servlet API stellt die Methode ServletRequest.setCharacterEncoding(String) zur Verfügung. Da man diese Methode aber aufrufen muss, bevor man den Request parsed, nützt einem das _charset_-Feld rein gar nichts, da man ja dieses auch nur aus den Request-Parametern auslesen kann.

Nachtrag 2: Wow, magic at work! Mein Beitrag erscheint automatisch unterhalb Sam Ruby's Artikel als Kommentar. Anscheinend nur durch den Referrer (oder Technorati?).

Nachtrag 3 (und die "Lösung" für die Problemstellung): Wie oben angemerkt wurde, sendet der IE nur in UTF-8 wenn ein entsprechendes Zeichen eingegeben wurde. Bzw wenn man client-seitig ein solches Zeichen einem Form-Feld einfügt. Auf diese Weise lässt sich der IE also doch noch dazu überreden, stets UTF-8 zu senden. Verrückt.
<form action=".." method="POST" accept-charset="UTF-8">
  <input type="hidden" name="dummyChar" value="&#9829;" />
  ..
</form>

Search

 

About michi

michi Michi a.k.a. 'Michael Platzer' is one of the Knallgraus, a Vienna-based New Media Agency, that deals more and more with 'stuff' that is commonly termed as Social Software.

Meet my fellow bloggers at Planet Knallgrau.

my delicious

Recent Updates

My Gadgets

Credits

Knallgrau New Media Solutions - Web Agentur f�r neue Medien

powered by Antville powered by Helma


Creative Commons License

xml version of this page
xml version of this page (summary)

twoday.net AGB

Counter



berufliches
blogosphaerisches
privates
spassiges
sportliches
technisches
trauriges
Profil
Logout
Subscribe Weblog