Wurzelzwerg: PHP, Ajax und Umlaute

Hallo allerseits,

ich habe mir eine Ajax-Anwendung gebaut, bei der Daten asynchron abgefragt werden und bei der anschließend Teile der Seite aktualisiert werden. Leider habe ich ein Problem mit Umlauten, dort erscheint nur ein Fragezeichen und je nach Umlaut fehlen einige nachfolgende Zeichen. Also habe ich die Daten vor dem Senden im PHP-Teil mit der Funktion "urlencode" codiert und nach dem Empfangen javascriptseitig mit "unescape" wieder decodiert. FUnktioniert auch, die Umlaute sind da. Allerdings habe ich festgestellt, dass Leerzeichen plötzlich durch "+" ersetzt werden, was auch nicht das ist, was ich brauche. Nun kann ich natürlich die Leerzeichen maskieren und separat umsetzen, aber ich weiß nicht, welche Schweinereien mir hier noch durch die Lappen gehen und welche Inhalte dann nicht mehr passen.

Deshalb meine Frage: Hat jemand eine andere Idee. Meine Idee ist es, den String so convertieren, dass jedes Zeichen bzw. Byte durch den Hexadezimalwert dargestellt wird. Dann wird das Ganze zwar doppelt so lang, aber ich gehe auf Nummer sicher.

Hier brauche ich aber Hilfe. Kennt jemand einen schnelle Vorgehensweise in PHP, um eine Zeichenkette in ihre Hex-Werte zu Konvertieren also "AB" wird zu "4142" und in Javascript um das Ganze wieder "umzudrehen"??

vielen Dank schonmal für die Geduld und für die Hilfe ;-)

  1. ich habe mir eine Ajax-Anwendung gebaut, bei der Daten asynchron abgefragt werden und bei der anschließend Teile der Seite aktualisiert werden. Leider habe ich ein Problem mit Umlauten, dort erscheint nur ein Fragezeichen und je nach Umlaut fehlen einige nachfolgende Zeichen.

    Du hast ein Encoding-Problem. AJAX verwendet immer UTF-8. Du vermutlich nicht.

    Also habe ich die Daten vor dem Senden im PHP-Teil mit der Funktion "urlencode" codiert und nach dem Empfangen javascriptseitig mit "unescape" wieder decodiert. FUnktioniert auch, die Umlaute sind da. Allerdings habe ich festgestellt, dass Leerzeichen plötzlich durch "+" ersetzt werden, was auch nicht das ist, was ich brauche.

    Im Parameterteil einer URL wird ein Leerzeichen, wenn man es urlencodiert, immer zu einem Pluszeichen. Das Decoding sollte allerdings eine korrekte Rückwandlung vollführen.

    Deshalb meine Frage: Hat jemand eine andere Idee. Meine Idee ist es, den String so convertieren, dass jedes Zeichen bzw. Byte durch den Hexadezimalwert dargestellt wird. Dann wird das Ganze zwar doppelt so lang, aber ich gehe auf Nummer sicher.

    Scheint mir keine gute Idee. Besser, wenn du grundsätzlich auf UTF-8 als Kommunikationszeichensatz für AJAX umstellst - oder gar deine gesamte Site.

    Hier brauche ich aber Hilfe. Kennt jemand einen schnelle Vorgehensweise in PHP, um eine Zeichenkette in ihre Hex-Werte zu Konvertieren also "AB" wird zu "4142" und in Javascript um das Ganze wieder "umzudrehen"??

    rawurlencode() macht sowas ähnliches, wie du willst.

    Trotzdem ist fraglich, ob dir das in allen Fällen etwas bringt. Der Hex-Code des Eurozeichens in ISO-8859-1 existiert nicht, in ISO-8859-15 lautet er dezimal 164, und in Windows-1252 ist er dezimal 128. Keiner dieser Werte wird von Javascript als Eurozeichen erkannt werden, denn Javascript arbeitet mit Unicode, dort wäre der korrekte Wert dezimal 8364.

    1. Lieber Peter,

      Encoding-Problem. AJAX verwendet immer UTF-8

      da gebe ich doch gleich noch einen drauf: echo [link:http://de2.php.net/manual/de/function.utf8-encode.php@title=utf8_encode($string)]

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)