Spiel und Spaß mit Charsets
Seit einiger Zeit schon bietet Kicktipp eine Lösung an, mit der Kunden mit “Profirunden” ihre Tipprunde per Javascript in ihre Seite einbinden können. Mehr als ein einziges Script-Tag ist nicht nötig und schon erscheint die Tipprunde auf einer beliebigen Seite.
Nun melden Kunden, dass Sonderzeichen auf bestimmten Seiten nicht korrekt angezeigt würden. Während der Testphase war das Problem nicht aufgetreten, doch nun zeigte sich uns der Kampf zwischen ISO und UTF mit all seinen unmenschlichen Folgen.
Das Setup war folgendes: Der Server liefert seinen Output generell in UTF-8. Auf Seiten des Kunden kann die Einbindung jedoch sowohl in ISO- als auch UTF-Seiten erfolgen. Auf Seiten, die in UTF-8 kodiert waren, war die Darstellung nun im Eimer. Es gab jedoch eine Stelle im Code, an der sämtlicher Output generell in ISO umgewandelt wurde. Dieser Code musste nun leider seinen Hut nehmen.
Jetzt wurde zwar der Content in UTF-Seiten und ISO-Seite vernünftig angezeigt, jedoch konnten nun Formulare, die von ISO-Seiten aus abgeschickt wurden, nicht richtig interpretiert werden. Hier hilft das schöne Formularattribut “accept-charset” weiter. Diesem gibt man als Wert einen Zeichensatz mit, werden die Daten in diesem Zeichensatz verschickt, egal wie die Seite selber kodiert ist.
Doch ach, der IE! IE6 spielt das Spiel leider nicht mit. Doch hierfür gibt es einen neckischen Workaround. Einige Browser unterstützen die Funktion, ein Formularfeld namens “_charset_” mit dem verwendeten Zeichensatz zu füllen. Wir haben also allen Formularen ein Hidden-Feld mitgegeben, das das Attribut name=”charset” hat. Und wenn dann der Server sieht, dass ihm der IE6 Formulardaten im _charset_ ISO geschickt hat, wandelt er sie vorher schnell in UTF um.
Ganz einfach, was? Hat auch nur 6 Stunden gedauert.