PHP регулярное выражение, чтобы удалить все JavaScript без исключения - PullRequest
3 голосов
/ 08 июля 2011

Я ищу способ удалить все теги JavaScripts из строки html.

Следующее регулярное выражение работает нормально, но я хотел бы добавить исключение:

$html = preg_replace('#<script[^>]*>.*?</script>#is', '', $html);

Какя могу добавить правило, что сценарии типа text / html игнорируются?

<script type="text/html" ... > ... </script> 

Есть предложения?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 08 июля 2011

Возможно, вы не пытаетесь санировать ненадежный HTML, но читатели этого вопроса не поймут неправильно:

Это не удалит javascript за пределами <script> элементов: <img src=bogus onerror=alert(42)>.

Это не удалит едва запутанные сценарии: <script>alert(42)</script >.

Превратит недопустимый контент в сценарии: <scrip<script></script>t>alert(42)</script>.

Я не говорю, что это то, что вы пытаетесь сделать. У вас могут быть вполне веские причины для этого, которые не имеют отношения к ненадежным вводам, но для более поздних читателей не пытайтесь свернуть свое собственное средство для дезинфекции HTML только с помощью регулярных выражений.

1 голос
/ 08 июля 2011

Используйте жадное совпадение, которое не попадет в указатели Майка, например:

$html = preg_replace('#<script.*</script>#is', '', $html);

Это должно (жадно) соответствовать всем тегам сценария.Что касается исключения, я не уверен, как это сделать, извините.

...