dedlfix: Hochkomma über mehrere Kontextwechsel bringen

Beitrag lesen

Tach!

Dass ich den Namen so schicke, imponiert Javascript überhaupt nicht:

echo ... htmlspecialchars($treffer['firma1'],ENT_QUOTES) ...

Das ist ja auch die funktion htmlspecialchars() und nicht javascriptspecialchars(). Für Javascript gibt es in PHP auch keine direkte Maskierfunktion. (Man kann wohl aber im einfachsten Fall json_encode() verwenden, hab ich mir sagen lassen.)

Ich müsste mit PHP für Javascript so etwas machen wie

 value='name.replace(/'/g, ''')'

Nein, gültige Javascript-Stringliterale erzeugen würde fürs erste reichen. Anschließend HTML beachten.

Aber beim besten Willen, wie pfriemel ich das in diese PHP-Zeile? Die Hochkommas treten sich ja geradezu auf die Füße. Mal sind sie Daten, mal gehören sie zum Javascript-Code und dann wieder zum PHP-Code:

Deswegen löst man da Ganze ja auch am besten von innen auf. Erstmal den Javscript-Kontext durchnehmen und die Sonderzeichen entsprechend behandeln. Dann eine Ebene höher gehen. Hier muss man dann alle Zeichen einzeln betrachten, ohne zu berücksichtigen, welche Bedeutung sie für das System darunter haben. Also \' ist einfach nur ein Backslash und ein Hochkomma. Wenn es für den Backslash eine Regel gibt, dann wendet man sie auf ihn an, wenn es eine Regel für das Hochkomma gibt, wendet man die an. Das kann dann durchaus auch mal ein \\\' ergeben.

Und dann wieder eine Ebene weiter nach außen nach demselben Prinzip. Man kann sich das Ganze nur dann etwas abkürzen, wenn man geschickt " und ' mischt, und so ein paar Maskierungen einsparen.

Am besten du liest dir mal den Kontextwechselartikel im Wiki durch, da ist das alles erklärt.

dedlfix.