Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Как удалить содержимое STYLE и SCRIPT


Автор: comhunt 2.5.2010, 22:34
Каким образом модно сделать то что написано в сабже?

Попробовал сконструировать такую конструкцию:

$content=~s/<script.*>.*<\/script>//g;

Не работает. И самое главное я не понимаю почему именно?

Автор: shamber 2.5.2010, 22:48
comhunt, вы пример того что удаляете приведите

Автор: comhunt 3.5.2010, 12:21
Пример контента, которые необходимо удалить:


<script>
function blablabla(){

}
</SCRIPT>

<STYLE>
.class{color:#FF0000;}

</style>

Автор: DurRandir 3.5.2010, 14:03
Почему не работает - потому что у вас case-sensitive сравнение, а закрывающий тег - в верхнем регистре. Но регулярка всё равно неверна, скормите ей
<script></script> disappears <script></script> remains

Потому что у вас "жадные" модификаторы количества. Но и это ещё не всё. Что вы хотите получить после обработки вот такого куска:

<script<script></script>> - у вас будет на выходе <script>, ну и закрывающаяся скобка точно так же делается. Вуаля.

Автор: Logo 21.5.2013, 22:56
Правильней
Код

$content =~ s/<script.*?>.*?<\/script\s*>//gis;

- модификатор i игнорирования регистра, s - точка совпадает в том числе и с переводом строки.

Но если хотите не допустить скриптов на странице и защитится от XSS, лучше поискать готовое решение, либо подойти к делу более основательно, почитав соответствующие статьи.
Помимо тега <script> скрипты можно включать в разные атрибуты, например onclick, ссылки с урлом javascript://, в старых версиях ie css expression.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)