|
|
|
| Суть проблемы:
Хочу удалить теги из документа. Пытаюсь это сделать посредством регулярных выражений PHP.
Проблема в том, что получается удалить теги только ВМЕСТЕ с основной частью документа.
$ptn= "<script[^>]*>.*</script>";
$txt = ereg_replace($ptn,"<nnnnn>\\0</nnnnn>",$txt);
|
В документе несколько тегов (в начале и в конце документа). Вышеприведённый код выбирает первый тег В ДОКУМЕНТЕ
<script type="text/javascript">
| и последний тег В ДОКУМЕНТЕ . И удаляет всё между ними.
В то время как надо, чтобы выбирались ВСЕ комбинации в документе. Минуя нормальный HTML текст между этими комбинациями.
Как быть?(версия PHP 5) | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: t3ma
(12.12.2009 в 21:09)
| | Может быть я неловко выражаюсь.
Это тоже интересный скрипт.
Но я имел ввиду удалить это:
<script>
javaScript код
</script>
|
В то время как удаляется так
<script>
javaScript код
</script>
Тут HTML код
<script>
javaScript код
</script>
|
Тут удаляется и HTML код по центру. Изображено несколько упорщённо, текст нашпигован <script></script> конструкциями. Причём самыми разннообразными. | |
|
|
|
|
|
|
|
для: Sever
(12.12.2009 в 19:33)
| | По умолчанию регулярное выражение считается жадным. Я не знаю как инвертируется жадность в ereg, так что могу показать как это будет выглядеть в preg.
<?
$ptn= "!<script[^>]*>.*</script>!isU";
$txt = preg_replace($ptn,"<nnnnn>\\0</nnnnn>",$txt);
|
| |
|
|
|
|
|
|
|
для: Саня
(12.12.2009 в 21:56)
| | >По умолчанию регулярное выражение считается жадным.
Ага, я подозревал это. Просто писал так "...|Uis" в ereg. А оно нифига, то же самое творило. Я аж все ресурсы по регулярным выражениям перерыл.
Кажется не жадным делает U, i - это нечувствительность к регистру. А s чтобы по всему тексту искало, а не только в одной строке.
Если не прав, поправьте.
Значит, синтаксис регулярных выражений в preg и ereg различается...
Этого я не знал.
Попробую preg_replace() спсб. | |
|
|
|
|
|
|
|
для: Sever
(12.12.2009 в 22:08)
| | > Кажется не жадным делает U, i - это нечувствительность к регистру.
> А s чтобы по всему тексту искало, а не только в одной строке.
Да. Именно так.
> Значит, синтаксис регулярных выражений в preg и ereg различается...
Ereg — это реализация регулярных выражений из POSIX, а preg — это регулярные выражения из языка perl. | |
|
|
|
|
|
|
|
для: Саня
(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/ | |
|
|
|
|
|
|
|
для: Sever
(12.12.2009 в 19:33)
| | Отказывайся от ereg, в php 6 его уберут. | |
|
|
|
|
|
|
|
для: ~AquaZ~
(14.12.2009 в 18:01)
| | >Отказывайся от ereg, в php 6 его уберут.
В принципе уже должны были убрать, ведь php6 уже вышел.
Совет принят. | |
|
|
|
|
|
|
|
для: ~AquaZ~
(14.12.2009 в 18:01)
| | Фактически он уже убран в PECL, т.е. из ядра его вынесли. | |
|
|
|