Remove HTML Comments with PHP
When it comes to sending content to users, I'm of the belief that less is more. There's no reason for HTML comments to be sent down to the user -- they simply bloat the payload. I remove unwanted HTML comments within my WordPress theme, so I thought I'd share the regex that does it:
// Remove unwanted HTML comments
function remove_html_comments($content = '') {
return preg_replace('/<!--(.|\s)*?-->/', '', $content);
}
That handy function, paired with output buffering, allows me to remove HTML comments from anywhere within the page. Less load, less cruft for mobile users!
![Create Spinning Rays with CSS3: Revisited]()
![CSS vs. JS Animation: Which is Faster?]()
How is it possible that JavaScript-based animation has secretly always been as fast — or faster — than CSS transitions? And, how is it possible that Adobe and Google consistently release media-rich mobile sites that rival the performance of native apps?
This article serves as a point-by-point...
![Reverse Element Order with CSS Flexbox]()
CSS is becoming more and more powerful these days, almost to the point where the order of HTML elements output to the page no longer matters from a display standpoint -- CSS lets you do so much that almost any layout, large or small, is possible. Semantics...
![MooTools 1.3 Browser Object]()
MooTools 1.3 was just released and one of the big additions is the Browser object. The Browser object is very helpful in that not only do you get information about browser type and browser versions, you can gain information about the user's OS, browser plugins, and...
That would strip out all the comment-like sequences in Javascript code.
A very rare case indeed, and mixing HTML and Javascript is usually deprecated, but still…
A fully-fledged HTML-Javascript parser just to prevent this is hardly the effort here.
Just remember that for backward compatibility for older browsers, script tags’ content are often enclosed in a comment. That would remove the entire script.
I’d like to add that I usually used the sequence [\s\S] instead of the (capturing) group (.|\s). I think it’s faster.
You can also do (?:.|\s) to make a group non-capturing. [\s\S] (whitespace or no whitespace) is nonsensical, you could just as well do . (any character).
David: Why do you do .|\s? As far as I know, . captures all characters, including whitespace.
I’ll check it out Fred!
When does this code run?
The best use I could see for this is a build step, eg you take the template files and them through this on deploy. It feels like a waste of cpu cycles to run something like this per-request?
I like this concept but where/when would you call the function for normal php pages? thx
This is great.
For my use, I’d prefer this being done from an htaccess file – is this possible at all?
what about MSIE conditional comments? ;-)
my code is like:
...
return preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|))(?:(?!-->).)*-->/s', '', $content);
…
Awesome point, love this — I’ll check it out and if it works I’ll update my post!
I tried this but it didn’t work :/ No comments were stripped at all.
Hi David, (V), the following mix of your snippets workes for me
$data = preg_replace(‘//’, ”, $data);
It depends on our framework, it should have a pipeline to minimize the html before sending it into client :D
But thanks for your useful snippet :)
Wouldn’t this alter IE conditional comments?
Hi David, (V), the following mix of your snippets workes for me
$data = preg_replace(‘//’, ”, $data);
2nd try, I used pre but the code was removed …
Hi David, (V), the following mix of your snippets workes for me
http://pastebin.com/bfzWVFUi
3rd try, I used pre but the code was removed … please delete my two previous comments
I added this code to my functions.php file, however, visitors can still post strong html tags and images on my blog :(
good concept and thanks for that
Nice approach. But it would be more believable if I you also removed html comments on this page. :) But I liked the regex.
Why even bother with putting in HTML comments at all? Since commenting is supposed to be for future developers eyes who will be reading the actual code I just comment in php and then don’t have to worry about comments passed into html.
Full strip function
function html2txt($document){ $search = array('@]*?>.*?@si', // Strip out javascript '@<[\/\!]*?[^]*?>@si', // Strip out HTML tags '@]*?>.*?@siU', // Strip style tags properly '@@' // Strip multi-line comments including CDATA ); $text = preg_replace($search, '', $document); return $text; }This crashes horribly if the comment inside the tag is very large.