Tach!
function escapeRawText($text){ $tests = [ '/<script/ium', // test for forbidden opening tags '/<\/script/ium', // test for forbidden closing tags '/<!--/ium' // test for forbidden opening comments ]; $replacements = [ '<\\\script', '<\\/script', '<\\!--' ]; return preg_replace($tests, $replacements, $text); }Bist du sicher, dass es drei
\im ersten Replacement sein müssen?
Sieht für mich inzwischen auch komisch aus - das könnte in der Tat ein Bug sein. Ich habe dazu damals zwar einen Unit-Test geschrieben und mir irgendwas dabei gedacht, aber ich glaube der Test könnte schon falsch sein. Dort wird sinngemäß assertEquals($actual,'<\\script>') getestet, das sieht für mich wiederum gut aus. Ich muss da jedenfalls nochmal einen genaueren Blick draufwerfen. Danke für den Hinweis.
Alternativ könnte man statt
\für Javascript hinzuzufügen, und die dann noch für PHP maskieren zu müssen, auch aus einem Zeichen eine Javascript-Unicode-Escape-Sequenz machen.\ubleibt innerhalb von PHPs single-quoted Strings unberührt.
Stimmt, so würde es auch gehen.