echo $begrüßung;
Aber auch hier kommt man mit Maskierung nicht immer weiter:
echo 'document.write('onclick="oeffnepopup(' ... Oops. ;-)
Hier hilft dann nur noch '
Ach was. Was ist, wenn dir bei der nächsten Verschachtlung die Umschreibungsmöglichkeiten ausgehen? Außerdem verwendest du hier HTML-Zeichen im Javascript-Kontext. Das geht beispielsweise nicht, wenn du eine Javascript-Datei erzeugst, sondern nur, wenn der Code im HTML-Umfeld liegt. Solche Probleme löst man am besten von innen nach außen auf. Man notiert sich also zuerst
oeffnepopup('123.html')
Nun geht man einen Schritt nach außen und ignoriert die Bedeutung des zuerst geschriebenen. Man betrachtet allein die einzelnen Zeichen, jedes für sich. Man betrachtet diese einzelnen Zeichen aus der Sicht des neuen Kontexts und wendet darauf die entsprechenden kontextspezifischen Regeln an.
onclick="oeffnepopup('123.html')"
weiter nach außen:
document.write('onclick="oeffnepopup('123.html')")
Ein ' in einem mit ' eingefassten String ist im Javascript-Kontext als ' zu notieren.
Weiter nach außen kommen wir nun in den PHP-Kontext und wollen die Zeichenkette ebenfalls in ' eingefasst notieren. Es gilt (zufälligerweise) die gleiche Regel, dass ein ' als ' zu notieren ist. Hinzu kommt, dass ein \ als \ geschreiben werden muss. Deshalb wird aus den beiden Zeichen \ gefolgt von ' ein \ gefolgt von '. Oder anders gesagt: ' wird zu \'.
<?php echo 'document.write('onclick="oeffnepopup(\'123.html\')"')'; ?>
Wenn wir nun des Beispiels wegen auch noch auf die " verzichten, ergibt sich:
oeffnepopup('123.html');
onclick='oeffnepopup('123.html'); '
document.write('onclick='oeffnepopup(\'123.html\');' ');
<?php echo 'document.write('onclick=\'oeffnepopup(\\\'123.html\\\');\' ')'; ?>
Und das schreiben wir nun in einen SQL-String ...
echo "$verabschiedung $name";