Doktor Knallcharge: Unterschiedliche Stringlängen PHP/JavaScript nach Definition?

Beitrag lesen

Njein. JavaScript verarbeitet keine Zeichen, sondern Zwei-Bytes. Das heißt, JavaScript versagt (noch) bei Zeichen jenseits der BMP ab Codepoint U+10000.

D.h. es gibt keine Implementierung in JavaScript, die 100% kompatibel zu base64_encde/base64_decode in PHP ist?

Mit base64 kodierst du Bytes in Text, das ist noch wieder eine andere Baustelle.

Selbstverständlich lässt sich base64 in Javascript einwandfrei zurückverwandeln. Dann bekommst du allerdings auch genau die Bytes, die du mit PHP reingesteckt hast - im Falle einer Zeichenkette eine Reihe Bytes, die utf-8-kodierte Zeichen darstellen. Anders ausgedrückt: Wenn du eine Zeichenkette mit PHP erst utf-8- und dann base64-kodierst, musst du _beide_ Kodierungen in Javascript auch wieder rückgängig machen. Das gilt auch, wenn du utf-8 in PHP, wie es meist geschieht, unwissentlich verwendest, einfach weil der Texteditor, mit dem du deine PHP-Skripte schreibst, bereits utf-8-kodiert speichert.

Grundsätzlich wäre es einfacher, wenn du bestehende Mechanismen zur Übermittlung von Textdaten verwendest. Im Falle von HTTP (du schriebst von AJAX) ist das die Content-Type-Zeile mit korrekter charset-Angabe. Ist die falsch oder "verschleierst" du die von PHP gesendeten Textdaten mit base64, kann der Browser sie logischerweise nicht korrekt in eine Javascript-Zeichenkette umwandeln. Dort solltest du ansetzen.