Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как удалить javaScript теги из документа НЕ задев данные(рег.выр. PHP)
 
 автор: Sever   (12.12.2009 в 19:33)   письмо автору
 
 

Суть проблемы:
Хочу удалить
<script></script>
теги из документа. Пытаюсь это сделать посредством регулярных выражений PHP.
Проблема в том, что получается удалить теги только ВМЕСТЕ с основной частью документа.


        $ptn= "<script[^>]*>.*</script>";
        $txt = ereg_replace($ptn,"<nnnnn>\\0</nnnnn>",$txt);


В документе несколько тегов
<script></script>
(в начале и в конце документа). Вышеприведённый код выбирает первый тег В ДОКУМЕНТЕ
<script type="text/javascript">
и последний тег В ДОКУМЕНТЕ
</script>
. И удаляет всё между ними.

В то время как надо, чтобы выбирались ВСЕ комбинации
<script></script>
в документе. Минуя нормальный HTML текст между этими комбинациями.

Как быть?(версия PHP 5)

  Ответить  
 
 автор: t3ma   (12.12.2009 в 21:09)   письмо автору
 
   для: Sever   (12.12.2009 в 19:33)
 

может быть так ?

<?php
$text 
"<script type=\"text/javascript\"><script></script>";
$text str_replace('<script''<'$text);
$text str_replace('</script>'' '$text);
echo 
$text;
?>

  Ответить  
 
 автор: Sever   (12.12.2009 в 21:26)   письмо автору
 
   для: t3ma   (12.12.2009 в 21:09)
 

Может быть я неловко выражаюсь.
Это тоже интересный скрипт.
Но я имел ввиду удалить это:

<script>
javaScript код 
</script> 


В то время как удаляется так

<script>
javaScript код 
</script> 

Тут HTML код

<script>
javaScript код 
</script> 

Тут удаляется и HTML код по центру. Изображено несколько упорщённо, текст нашпигован <script></script> конструкциями. Причём самыми разннообразными.

  Ответить  
 
 автор: Саня   (12.12.2009 в 21:56)   письмо автору
 
   для: Sever   (12.12.2009 в 19:33)
 

По умолчанию регулярное выражение считается жадным. Я не знаю как инвертируется жадность в ereg, так что могу показать как это будет выглядеть в preg.
<?
        $ptn
"!<script[^>]*>.*</script>!isU"
        
$txt preg_replace($ptn,"<nnnnn>\\0</nnnnn>",$txt);

  Ответить  
 
 автор: Sever   (12.12.2009 в 22:08)   письмо автору
 
   для: Саня   (12.12.2009 в 21:56)
 

>По умолчанию регулярное выражение считается жадным.
Ага, я подозревал это. Просто писал так "...|Uis" в ereg. А оно нифига, то же самое творило. Я аж все ресурсы по регулярным выражениям перерыл.
Кажется не жадным делает U, i - это нечувствительность к регистру. А s чтобы по всему тексту искало, а не только в одной строке.

Если не прав, поправьте.

Значит, синтаксис регулярных выражений в preg и ereg различается...
Этого я не знал.
Попробую preg_replace() спсб.

  Ответить  
 
 автор: Саня   (12.12.2009 в 22:25)   письмо автору
 
   для: Sever   (12.12.2009 в 22:08)
 

> Кажется не жадным делает U, i - это нечувствительность к регистру.
> А s чтобы по всему тексту искало, а не только в одной строке.
Да. Именно так.

> Значит, синтаксис регулярных выражений в preg и ereg различается...
Ereg — это реализация регулярных выражений из POSIX, а preg — это регулярные выражения из языка perl.

  Ответить  
 
 автор: Sever   (12.12.2009 в 23:55)   письмо автору
 
   для: Саня   (12.12.2009 в 22:25)
 

>Ereg — это реализация регулярных выражений из POSIX, а preg — это регулярные выражения из языка perl.
Значит, надо искать в инете спецификации регулярных выражений именно на POSIX для ereg, и именно для perl для preg. Думаю, это достаточно ценная инфа. И не только для меня(в книгах по PHP мне это почему-то ни разу не встречалось).

В общем, БЛАГОДАРЮ ЗА ЦЕННУЮ ИНФУ.

Всё, проверил. Всё работает так, ничего перезапускать не надо, preg всё расставляет как надо и где надо.

Вот окончательный вариант по убиранию скриптов из HTML документа:
if ( isset($_GET['pathTo']) && file_exists($_GET['pathTo'])
    && strpos($_GET['pathTo'],".html")>0)
{
$ptn= "!<script[^>]*>(.)*</script>!Uis";
$txt = preg_replace($ptn,"",$txt);

echo HtmlSpecialChars($txt);

}


А вот интересные примеры регулярных выражений на перловом PCRE:
http://www.shtogrin.com/library/web/pcre/

  Ответить  
 
 автор: ~AquaZ~   (14.12.2009 в 18:01)   письмо автору
 
   для: Sever   (12.12.2009 в 19:33)
 

Отказывайся от ereg, в php 6 его уберут.

  Ответить  
 
 автор: Sever   (14.12.2009 в 22:15)   письмо автору
 
   для: ~AquaZ~   (14.12.2009 в 18:01)
 

>Отказывайся от ereg, в php 6 его уберут.
В принципе уже должны были убрать, ведь php6 уже вышел.

Совет принят.

  Ответить  
 
 автор: cheops   (15.12.2009 в 12:48)   письмо автору
 
   для: ~AquaZ~   (14.12.2009 в 18:01)
 

Фактически он уже убран в PECL, т.е. из ядра его вынесли.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования