molily: Javascript "escape" wird durch "encodeURI" ersetzt?

Beitrag lesen

Hallo,

was hat escape() nun mit UTF-8 zu tun? Es wandelt doch nur Steuer- und Sonderzeichen in ihre URL-codierte Form um, also z.B. \r in %0D. Ob der String bzw. das ganze Dokument dabei in UTF-8, ISO-8859-x oder gar Plain ASCII codiert ist, spielt nicht die geringste Rolle.

Äh... Strings in JavaScript sind erstmal nicht »kodiert«, weil JavaScript Strings nie als Byte-Sequenzen o.ä. sieht, sondern immer nur als Unicode-Zeichen (die intern üblicherweise als UTF-16 gespeichert werden, was einen aber nicht zu interessieren braucht). Bei URL-Kodierung müssen alle Unicode-Zeichen auf US-ASCII abgebildet werden, d.h. escape("ö") ergibt %F6. Dieses 0xF6 ist nichts anderes als die Ein-Byte-Kodierung von ISO-8859-1. In UTF-8 würde dieses Zeichen aber mit zwei Byte kodiert.

Nö, encodeURI() macht ja genau dasselbe - nur dass hier noch einige Zeichen mehr umcodiert werden, die in URLs auch nichts verloren haben.

encodeURI nutzt vor allem UTF-8 statt ISO-8859-1.

Mathias