Sven Rautenberg: Zeichencode in Zeichen konvertieren / Sonderzeichen in Form

Beitrag lesen

Moin!

Als erstes habe ich dabei einfach mein JavaScript den value aus der textarea rausholen lassen, diesen mit escape() verschlüsselt (es darf ja kein & enthalten sein) und als einen (von mehreren) Parametern an die Funktion SendData (siehe unten) gegeben.

escape() ist die falsche Funktion. encodeURIComponent() ist richtig.

Wenn ich encodeURIComponent verwende, habe ich das gleiche Problem, wie mit meinem Verschlüsselungsumweg encode2(). Also z.B. wird aus einem ä ein ä.

Daher: Aus welchem Grund ist escape() falsch?

escape codiert die Zeichen, die nicht ASCII sind, gemäß ISO-8859-1 - das funktioniert nur mit den Zeichen, die in dieser Codierung existieren, und es spielt absolut nicht gut zusammen mit Ajax, welches sich im Prinzip nur mit UTF-8-Datenaustausch wohlfühlt. ISO-8859-1 und UTF-8 mischen ist aber eine ganz ganz schlechte Idee...

Anmerkung fürs Protokoll: Ich will nicht ausschließen, dass man das XMLHttpRequest-Objekt unter gewissen Umständen und mit viel Servermitarbeit nicht doch zur geordneten Mitarbeit mit einer ANDEREN Codierung als UTF-8 überreden könnte - aber UTF-8 fällt halt direkt aus der Tüte, ohne Extra-Aufwand, und sollte sowieso die einzig wahre Codierung sein, die man heutzutage verwendet - ohne Klimmzüge.

Und dies funktioniert bei Umlauten nicht. Ein mb_ord("ä") gibt mir zwar 228 aus, aber ein mb_chr(228) oder ein mb_chr(mb_ord("ä")) gibt ä (2 Zeichen!) aus.

Offenbar ist die Seite, in der du UTF-8-codierte Zeichen ausgibst, nicht mit dieser Codierung an den Browser übertragen worden. Check mal, welches Encoding dir dein Browser in den Seiteninformationen anzeigt.

Doch, ich hatte zwar ursprünglich Latin1 über einen meta-Tag ausgegeben, aber im Moment habe ich auf UTF-8 gewechselt. Dies wird mir auch vom Firefox bestätigt (View Page Info - Encoding: UTF-8).

Meta-Tags sind irrelevant, wenn der Server einen HTTP-Header übermittelt hat.

Deine geschriebenen Funktionen sind leider allesamt überflüssig.

Da ich magic_quotes deaktivieren kann, weiß ich das mittlerweile auch.
Wie gesagt - ohne meinen Verschlüsselungsumweg und mit escape() vorm Absenden funktioniert's ja jetzt auch.

WENN du escape() benutzt, UND das Ergebnis zurückgespielt an den Browser funktioniert, dann ist die Wahrscheinlichkeit sehr hoch, dass du dich komplett in ISO-8859-1 bewegst, und eben gerade nicht UTF-8 benutzt.

- Sven Rautenberg