Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вырезать javascript


Автор: A1ekcandr 30.8.2013, 15:04
Народ помогите составить регулярное выражение для вырезки javascript из html тегов

Код

<tr><td>Способ получения</td><td><nobr onchange="                
                    if(this.value>0) {
                        $('deliveryDiv').set('html','(уточните)');
                    } else {
                        "$('deliveryDiv').set('html','');
                    }
                    " style="color:red">Способ отдачи</nobr></td></tr>



При решении задачи, у меня получились следующие регулярные выражения:

Код

preg_replace('#(onchange|onselect|onmouseover|onmouseout)="(.*?)"#iu', '', $res);

Но проблема в том, что если в коде будет \"(экранированная кавычка), то такое регулярное выражение вырежет только часть кода. 

Если же сделать так:
Код

preg_replace('#(onchange|onselect|onmouseover|onmouseout)="(.*?)\s*">#iu','>', $res)

То могут вырезаться последующие атрибуты (например в данном случае style="color:red")тега, что тоже не гуд.

Друзья, получается мне нужен селектор на подобие (.*?)(?!\\")" т.е. выбрать весь текст до кавычки, если перед кавычкой не стоит обратный слеш. 

Автор: Sanchezzz 30.8.2013, 18:25
jevix возмите и пользуйтесь 

Автор: A1ekcandr 2.9.2013, 09:37
Спасибо за информацию, о том что имеется такая библиотека. Но мне кажется что в моем случае, все таки будет проще написать нормально регвыр smile. К тому же библиотека написана под php5 а у меня используется php4 smile

Автор: ksnk 2.9.2013, 10:02
Цитата(A1ekcandr @  2.9.2013,  09:37 Найти цитируемый пост)
а у меня используется php4 

А с какой  целью нет перехода на 5.2, например? Переход на эту версию с 4-ки относительно бескровный. Вот у более старших версий многие функции объявлены deprecated, так что проблем может быть больше.

Пример с html в первом посте невалидный, это ничего?

Регуляркой можно было бы вырезать все атрибуты onXXX="...". Активные элементы , типа action у формы и href у ссылок нужно проверять на `похожую на url` строку.

Автор: A1ekcandr 2.9.2013, 10:24
Проблему решил, в итоге получился  следующий регвыр:

Код

$content = preg_replace('#(onchange|onselect|onmouseover|onmouseout)\s*=\s*"(.*?)\s*((?<!\\\)")#is','',$content);



Добавлено через 4 минуты и 53 секунды
to ksnk
Дело в том что у нас в старой версии движка используются xslt шаблоны, из-за этого массовый переход всех клиентов на 5.2 становится практический невозможен. 

В итоге мы конечно сделали новую версию нашего ПО на php5, но есть старые клиенты у которых используется php4 и мы вынуждены пока поддерживать две ветки проекта.

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