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.\u
bleibt innerhalb von PHPs single-quoted Strings unberührt.
Stimmt, so würde es auch gehen.