flashnfantasy: AJAX und Umlaute

Hai allezusammen,

Alles klappt soweit ganz toll, nur die Umlaute kriege ich nicht gezähmt.

Hier erstmal die Basis:

requester.onreadystatechange = ajaxResponse;
requester.open("POST", "./socialtaggingA.php");
requester.setRequestHeader("Pragma", "no-cache");
//requester.setRequestHeader("Content-Type", "ISO-8859-1");
requester.setRequestHeader("Content-length", value.length);
requester.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
requester.send(value);

also Daten werden gesendet per Post, weil halt lange Texte dabei sind.

öäüÄÜÖß werden in dieser Version in Sonderzeichen umgewandlt
zb. ö -> ö

Jetzt dachte ich, ich wandele den gesendeten Wert um
mit

encodeURI(value)

was ja auch so klappt, jedoch erhält die empfangene Website wieder diese komischen Zeichen, die PHP auch nicht rawurldecode oder so in deutsche Umlaute zurückverwandeln kann.

Wie kriege ich die Umlaute sicher über AJAX gesendet ?

Gruß,
Flash

  1. Hat sich gelöst,

    2 Stunden wie ein Ochs vor dem Berg, und dann 2min für die Lösung.

    Man muß die gesendete Zeichenkette mit escape() umwandeln...

    Gruß,
    Flash

    1. Hallo,

      Man muß die gesendete Zeichenkette mit escape() umwandeln...

      Bitte nicht - damit handelst du dir arge Probleme ein.

      Zunächst einmal: Ja, bei POST-Anfragen mit XMLHttpRequest wird standardmäßig UTF-8 als Kodierung für die POST-Daten verwendet. Ich wüsste auch nicht, wie man das ändern kann. Korrekt wäre ein Header Content-Type: application/x-www-form-urlencoded; charset=..., aber das beeindruckt die Browser nicht, sie benutzen trotzdem UTF-8.

      Warum du auf keinen Fall escape() verwenden solltest: Wenn jemand Zeichen außerhalb von ISO-8859-1 eingibt (z.B. typographische Anführungszeichen, die auch gerne durch Programme automatisch eingefügt werden), dann werden diese durch escape() mit %uXXXX maskiert. XXXX ist dabei die hexadezimale Unicodenummer des Zeichens.

      escape("Er sagte: „Hallo!“");
      bringt z.B.
      Er%20sagte%3A%20%u201EHallo%21%u201C

      Jagst du dann dein urldecode drüber, bekommst du
      Er sagte: %u201EHallo!%u201C

      Damit hast du Zeichensalat.

      Wie kriege ich die Umlaute sicher über AJAX gesendet ?

      Wie gesagt, am besten stellst du auf UTF-8 um. Dann kannst du, wenn du unbedingt willst, serverseitig immer noch eine Umkodierung zu ISO-8859-1 vornehmen. Bei der gehen natürlich u.U. Zeichen verloren - aber koordiniert, ohne dass wie bei escape() Unsinn dabei herauskommt.

      Mathias

  2. öäüÄÜÖß werden in dieser Version in Sonderzeichen umgewandlt
    zb. ö -> ö

    Ajax verwendet immer UTF-8. Das kannst du nicht abändern, das ist fest.

    Weil auch Javascript intern Unicode verwendet.

    Wie kriege ich die Umlaute sicher über AJAX gesendet ?

    Erwarte UTF-8 vom Browser. Wandle entsprechend und nimm den Verlust von Zeichen in Kauf, oder stelle dein Skript seinerseits auf UTF-8 um.