Ich gehe davon aus, dass die zu übertragenden Daten eine Zeichenkette sind.
Wie andere Kommentatoren bereits erwähnt haben, ist AJAX eine mögliche Lösung, aber die Nachteile überwiegen die Vorteile: Es hat eine Latenz und ist schwieriger zu programmieren (es benötigt den Code, um den Wert sowohl server- als auch clientseitig abzurufen), wenn eine einfachere Escaping-Funktion ausreichen sollte.
Also sind wir zurück beim Escaping. json_encode($string)
funktioniert wenn du die Ausgangszeichenkette zuerst als UTF-8 kodierst, falls sie es nicht bereits ist, denn json_encode
erfordert UTF-8-Daten. Wenn die Zeichenkette in ISO-8859-1 ist, kannst du einfach json_encode(utf8_encode($string))
verwenden; andernfalls kannst du immer zuerst iconv
zur Konvertierung verwenden.
Aber es gibt einen großen Stolperstein. Wenn du es in Ereignissen verwendest, musst du htmlspecialchars()
auf das Ergebnis anwenden, um es zu korrektem Code zu machen. Du musst dann entweder darauf achten, doppelte Anführungszeichen zu verwenden, um das Ereignis einzuschließen, oder immer ENT_QUOTES
zu htmlspecialchars hinzufügen. Zum Beispiel:
Script-Tags & Ampersand!";
// Funktioniert nicht:
//echo '';
// Funktioniert nicht:
//echo "";
// Funktioniert nicht:
//echo "";
// Funktioniert:
//echo "";
// Funktioniert:
echo '';
echo "";
Jedoch kannst du htmlspecialchars
nicht auf regulären JavaScript-Code (Code, der in </code>...<code>
-Tags eingeschlossen ist) anwenden. Das macht die Verwendung dieser Funktion fehleranfällig, da man vergessen könnte, das Ergebnis zu htmlspecialchars
, wenn man Event-Code schreibt.
Es ist möglich, eine Funktion zu schreiben, die dieses Problem nicht hat und sowohl in Ereignissen als auch in regulärem JavaScript-Code verwendet werden kann, solange du deine Ereignisse immer in einfachen Anführungszeichen oder immer in doppelten Anführungszeichen einschließt. Hier ist mein Vorschlag, bei dem sie in doppelten Anführungszeichen stehen müssen (was ich bevorzuge):
`Die Funktion erfordert PHP 5.4+. Beispielverwendung:
Script-Tags & Ampersand!";
// Beachte die Verwendung von doppelten Anführungszeichen, um die Ereignisdefinition einzuschließen!
echo '';
// Beispiel mit regulärem Code:
echo 'alert(', escapeJSString($myvar), ');';
echo '';`