как удалить html-комментарии в php

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

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

Я все еще получаю все комментарии <! – bla bla bla ->
Что я делаю не так?

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

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

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

 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; } 
  1. Регулярные выражения очень трудны для того, чтобы делать то, что вы хотите здесь.

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

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

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

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

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