Sven Rautenberg: Kodierungsprobleme...

Beitrag lesen

Moin!

ich bin verzweifelt, ich kann keine vernünftige Lösung meines Problems finden, nur Workarounds..

Du mischst ein wenig zuviel alle möglichen Dinge durcheinander. Daran wird die meiste Verwirrung liegen. Ich sehe jQuery (das ist nicht schlecht), eine separate JSON-Funktion, irgendwelches UTF-8-Geskripte eines uralten SELFHTML-Artikels (das du unangenehmerweise nicht verlinkt hast) - insgesamt eine Mischung von Skripten, vermengt mit gewissen Wissenslücken über das Encoding an sich.

die Daten zwischen dem Server und Client werden mit Hilfe von JSON ausgetauscht. Auf der Serverseite wird JSON mit PHP-Funktion json_encode() erzeugt, auf der Clientseite mit einem Javascriptobjekt, das unter http://www.devpro.it/JSON/files/JSON-js.html zu finden ist. Die ganze Seite wird aus mehreren Gründen im UTF-8 Kontext dargestellt. Als Framework benutze ich jQuery.

Worum gehts genau? jQuery bietet eine Vielzahl von Erweiterungen für so ziemlich jeden Einsatzzweck - das AJAX-Absenden eines Formulars gehört mit zu den einfachsten Übungen, die man sich hinzuaddieren kann.

AJAX arbeitet übrigens immer mit UTF-8. Wobei die Strings in Javascript grundsätzlich unicode-enthaltende Strings sind, das Ajax-Objekt wandelt diese beim Senden zum Server automatisch in UTF-8-Bytes um.

Umgekehrt wird die Encoding-Angabe des Servers zwar respektiert, aber mit UTF-8 an dieser Stelle ist man ebenfalls auf der sicheren Seite.

Insofern kann ich aus meiner Erfahrung heraus nicht sehen, wozu du eine UTF-8-Codierfunktion in Javascript benötigst.

Der Nutzen einer JSON-Dekodierfunktion könnte sich angesichts eventueller Risiken noch stellen - allerdings bietet sich auch hier für jQuery ein passendes Plugin an, sofern du das schlichte eval() vermeiden möchtest - wobei eval() für JSON besser ist, als sein Ruf, bzw. Alternativen hierzu kaum etwas gewinnen, solange man nichts gegen AJAX-Hijacking tut (siehe [linkhttp://www.fortify.com/advisory.jsp]).

Ein paar Beispiele, die tatsächliche Zeichen werden mit Charcodes ersetzt, da ser automatische Filter von selfhtml sie leider nicht durchläßt.

Das Forum hier erlaubt sämtliche erlaubten Unicode-Zeichen. Wenn dein Posting mit den Originalzeichen nicht durchgeht, dann liegt das daran, dass du ungültige Unicode-Zeichen verwenden wolltest. Und das wiederum deutet für meine Begriffe recht eindeutig auf das Problem: Falsche Unicode-Produktion.

Die funktion utf8_encode für Javascript wurde aus selfhtml.org entnommen. Ich teste meine Anwendung nur mit den letzten Versionen von Firefox 3 und Explorer 7.

Wie oben erwähnt: Ein Link zu der von dir gefundenen Funktion wäre nett. Falls du den Artikel um [linkhttp://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm#a4] herum meinst: Vergiß ihn. Das Teil ist sieben Jahre alt, und es stecken einige Verständnisfehler drin, beispielsweise die (mittlerweile, weil es UTF-8-fähige Editoren gibt) unkorrekte Idee, Editoren müßten UTF-8-Zeichen immer als zwei (oder mehr) seltsame Hieroglyphen anzeigen.

Der Artikel steht sozusagen auf der Abschußliste - ich schicke ihn nur deshalb noch nicht in den Ruhestand, weil ich ihn hier nochmal verlinkt habe.

- Sven Rautenberg

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