Sven Rautenberg: Maskierungsproblem

Beitrag lesen

Moin!

Ich habe ein PHPSkript in Verbindung mit JavaScript und die stellt mich vor folgendes Problem:

document.write("
<?php echo "
"; ?>
");

Wenn dieser Codew ausgeührt werden soll, kommt immer die Fehlermeldung, dass eine Zeichenfolge nicht abgeschlossen wäre.

Logisch. Du hast hier vermutlich das komplexeste Maskierungsproblem, dass man sich bei der Verbindung von PHP und Javascript vorstellen kann, weil alle Anführungszeichen zu mehreren Zeiten nicht nur Zeichen sind, sondern eine besondere Bedeutung haben.

Bedenke immer: Entscheidend ist, was im Browser ankommt. Und da soll sowas ankommen:

document.write("String mit " und ' Anführungszeichen!");

Klar: Das " muß escapet werden. Das ' _darf_ escapet werden.

Wenn du jetzt den Stringinhalt mit PHP reinschreiben willst, mußt du logischerweise dafür sorgen, dass die Ausgabe von PHP Maskierungszeichen ausgibt, die in Javascript wirksam werden.

echo "Ein " und ein ' Anführungszeichen";

Schreibt den Text
Ein " und ein ' Anführungszeichen.

Und wenn du dir dann das document.write() drumherumdenkst, wird klar, dass das nicht funktionieren kann:

document.write("<?php echo "Ein " und ein ' Anführungszeichen"; ?>");
führt zu
document.write("Ein " und ein ' Anführungszeichen.");
und das funktioniert nicht.

Du mußt also alle Anführungszeichen, die in Javascript ankommen, maskieren. Da sie in PHP auch schon maskiert sind, mußt du sie praktisch doppelt maskieren: Du mußt das Maskierungszeichen zusätzlich in Javascript ausgeben.

Das führt zu:
document.write("<?php echo "Ein \" und ein \' Anführungszeichen"; ?>");

Im Browser kommt dann
document.write("Ein " und ein ' Anführungszeichen.");
an.

Du wirst fragen: Geht das nicht einfacher? Klar geht das einfacher. Verwende addslashes().

document.write("<?php echo addslashes("Ein " und ein ' Anführungszeichen"); ?>");

Alle anderen Lösungsvorschläge, die ich in diesem Thread bislang gesehen habe, gehen leider alle am Kernproblem vorbei. Insbesondere bei der Here-Doc-Variante bin ich mir nicht sicher, ob Backslashes nicht doch gefressen werden - und damit gar nicht in Javascript ankommen, was aber dringend notwendig wäre.

- Sven Rautenberg

--
SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|