Sven Rautenberg: Umlaute umwandeln

Beitrag lesen

Moin!

ich möchte gerne Umlaute umwandeln:

var neu = txt.replace(/ö/g,"oe");

Leider funktioniert das bei mir nicht. Den Text greife ich von der Seite ab, kann das ein Problem der Seitenkodierung sein (UTF8)?

Ja, natürlich. Aber denk auch daran, dass auch dein Javascript-Code eine Codierung hat, die zählt!

Eine HTML-Seite hat hinsichtlich ihrer Codierung immer Recht. Wenn der Browser korrekte Umlaute anzeigt, stimmt dort alles - egal was als Codierung angegeben ist. Der Browser nimmt die Bytes der HTML-Seite, checkt die Codierung, und wandelt auf dieser Basis alle Zeichen in eine interne Darstellform für Unicode-Zeichen um. Auch Entities und numerische Zeichenreferenzen werden in diesem Schritt wieder zu den Originalzeichen zurückgewandelt.

Dein Javascript hat ebenfalls eine Codierung, nämlich die, mit der dein Editor die eingegebenen Schriftzeichen gespeichert hat. Bei Scripten, die in der HTML-Seite enthalten sind, gibts keine Abweichungen: Das Skript ist genau so codiert, wie das HTML. Ein eingebenes "ö" ist also in beiden Teilen identisch codiert, wird vom Browser identisch in die interne Unicode-Darstellung umgewandelt, und deswegen findet der Regex auch das korrekte, weil gleiche, Zeichen "ö".

Externe Skripte können abweichende Codierungen haben. Wenn der Server die Codierung allerdings nicht mitteilt, kann der Browser anfangen, zu raten.

Solche Ratespielchen stören bei Javascript in den meisten Fällen nicht, da der Programmcode ja sowieso nur mit Zeichen geschrieben ist, die in allen Codetabellen identisch sind, egal ob UTF-8. ISO-8859-1, -2, -3, -4, -5,... Windows-1252, etc.

Aber wenn dein Browser denkt, er kann das Javascript als UTF-8 interpretieren, und du hast in Wirklichkeit die Datei als ISO-8859-1 gespeichert, dann steht im Programmcode ein ISO-"ö" bzw. genauer das Byte eines ISO-"ö" - und das kann der Browser, der die UTF-8-Tabelle benutzt, mit dieser Tabelle nicht als ein Unicode-"ö" erkennen. Deshalb findet der Regex dann nicht die in der Seite enthaltenen "ö", weil er nach etwas vollkommen anderem sucht.

Dem Server beizubringen, auch für Javascript-Dateien eine Encoding-Angabe mitzuliefern, wird das Problem sicherlich beheben, wenn dann noch das Encoding dieser Dateien korrekt ist.

- Sven Rautenberg

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