beatovich: Wiki-Push: PHP

Beitrag lesen

hallo

Tach!

Dazu müsste der Platzhalter den Kontext kennen, in dem er sich befindet. htmlspecialchars() ist ja nicht für alle Kontexte eines HTML-Dokuments geeignet, mitunter muss man mehrere Maskierungen schachteln.

Natürlich. Die Frage ist nur wann. Es braucht hier nicht interessieren, dass $var1 Javascript ist. Und das javascript muss nichts wissen über den Kontxt in den es eingesetzt wird.

sprintf('<button onclick="%s">%s</button>', htmlspecialchars($var1), htmlspecialchars($var2));

In diesem einfachen Beispiel ist das noch kein Problem. Aber nimm mal eine URL in einem A-Element. Da wäre es theoretisch schon wie folgt. Praktisch kann man das htmlspecialchars() in dem Fall weglassen, weil rawurlencode() keine HTML-spezifischen Zeichen übriglässt.

sprintf('<a href="http://example.com/%s">%s</a>', htmlspecialchars(rawurlencode($var1)), htmlspecialchars($var2));

Aber du kannst doch gnz klar die Behandlung vorschreiben.

Nehmen wir ein nicht triviales Beispiel

sprintf('<h%d>%s</h>', $header_level, htmlspecialcharsORNOT($var2,$boolean));

Eierlegende Wollmilchsäue... hier bedeutet Kontext viel mehr. Offensichtlich muss da einiges an Wissen über die übergeodnete Anwendung einfliessen und für den Fall, dass der Inhalt von $var2 auch html enthalten soll, braucht es eine Überprüfung nach dem html header Modell.

Meine Antwort lautet da: man vermeide eierlegende Wollmilchsäue.