2012-07-05 2 views
3

Я пытаюсь удалить любые комментарии внедренные с HTML файлкак удалить HTML комментарии в PHP

$data= file_get_contents($stream); <br> 
$data = preg_replace('<!--*-->', '', $data); <br> 
echo $data; 

Я до сих пор закончившейся со всеми комментариями < - бла-бла-бла ->
Что я делаю неправильно?

+0

увидеть эти ссылки на праве >> –

+0

возможного дубликата [RegExp в strip HTML comments] (http://stackoverflow.com/questions/1084741/regexp-to-strip-html-comments) – xdazz

ответ

0
  1. Регулярные выражения очень трудны для того, чтобы делать то, что вы хотите здесь.

  2. Для соответствия произвольному тексту в регулярном выражении вам необходимо .*, а не только *. Ваше выражение ищет <!-, за которым следует ноль или более - символов, за которыми следует -->.

+0

У моего целевого html есть комментарии к многострочным ... комментариям одной строки работают нормально ... как я могу исправитьмногострочные комментарии? –

+0

Вам действительно нужно '. *?', Чтобы соответствовать как можно меньше, или вы удалите все с самого первого '', которое не то, что вы хотите. –

0

s/<!--[^>]*?-->//g

переключатель вверх регулярное выражение

+0

Вам действительно нужно '[^>] *?', Чтобы соответствовать как можно меньше, или вы удалите все с самого первого '', которое не то, что вы хотите. –

2

Ниже регулярное выражение будет удалить HTML-комментарии, но будет держать условные комментарии.

<!--(?!<!)[^\[>].*?--> 
+0

'strip_tags' разделяет все теги, а не только комментарии. –

+0

@NedBatchelder, благодаря совету, я быстро прочитал вопрос и не обратил внимания на это. Я сделал редактирование. –

+0

'strip_tags' всегда разделяет комментарии, но вы можете указывать теги WHAT для разметки. Specfy что-то, что не в HTML, и вы снимаете только комментарии. – ghoti

-2

Вы должны сделать это так:

$str = "<html><!-- this is a commment -->OK</html>"; 
$str2 = preg_replace('/<!--.*-->/s', '', $str); 
var_dump($str2); 
+1

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

+1

слишком много обратных косых черт, не хватает ленивой звезды. – ghoti

+0

Отредактировано (удалены обратные косые черты), я попробовал (в моем случае) это работает. –

2

Вы можете сделать это без использования регулярных выражений:

function strip_comments($html) 
{ 
    $html = str_replace(array("\r\n<!--", "\n<!--"), "<!--", $html); 
    while(($pos = strpos($html, "<!--")) !== false) 
    { 
     if(($_pos = strpos($html, "-->", $pos)) === false) 
      $html = substr($html, 0, $pos); 
     else 
      $html = substr($html, 0, $pos) . substr($html, $_pos+3); 
    } 
    return $html; 
} 
Смежные вопросы