O'Reilly

Remove HTML Comments with PHP

By on  

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!

Track.js Error Reporting

Recent Features

  • Serving Fonts from CDN

    For maximum performance, we all know we must put our assets on CDN (another domain).  Along with those assets are custom web fonts.  Unfortunately custom web fonts via CDN (or any cross-domain font request) don't work in Firefox or Internet Explorer (correctly so, by spec) though...

  • Introducing MooTools Templated

    One major problem with creating UI components with the MooTools JavaScript framework is that there isn't a great way of allowing customization of template and ease of node creation. As of today, there are two ways of creating: new Element Madness The first way to create UI-driven...

Incredible Demos

  • Six Degrees of Kevin Bacon Using MooTools 1.2

    As you can probably tell, I try to mix some fun in with my MooTools madness but I also try to make my examples as practical as possible. Well...this may not be one of those times. I love movies and useless movie trivia so naturally I'm...

  • Pure CSS Slide Up and Slide Down

    If I can avoid using JavaScript for element animations, I'm incredibly happy and driven to do so.  They're more efficient, don't require a JavaScript framework to manage steps, and they're more elegant.  One effect that is difficult to nail down with pure CSS is sliding up...

Discussion

  1. MaxArt

    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.

    • MaxArt

      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!

  2. 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?

  3. I like this concept but where/when would you call the function for normal php pages? thx

  4. This is great.

    For my use, I’d prefer this being done from an htaccess file – is this possible at all?

  5. (v)

    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);

  6. 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 :)

  7. Wouldn’t this alter IE conditional comments?

  8. 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 …

  9. 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

  10. Mike Smith

    I added this code to my functions.php file, however, visitors can still post strong html tags and images on my blog :(

  11. good concept and thanks for that

  12. spongeBob

    Nice approach. But it would be more believable if I you also removed html comments on this page. :) But I liked the regex.

  13. Jack

    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.

  14. 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;
    } 
    
  15. JoeB

    This crashes horribly if the comment inside the tag is very large.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Serve a Directory via Python

    Sometimes I'm working with a test HTML file and some JavaScript but need to work off of a served space.  In that case, I sometimes need to swap out folders within MAMP Stack which leads to a maintenance nightmare.  Bleh. I recently found out that you can...

  • OSCON Portland:  Conference  Discount!

    O'Reilly puts on the best web industry conferences in the world.  These conferences include Fluent Conference, Velocity Conference, and the upcoming OSCON in Portland, Oregon from July 20-24.  Open Source Convention (OSCON) is a conference that focuses specifically on open source developers and the tools and possibilities...

  • Follow Redirects with cURL

    I love playing around with cURL. There's something about loading websites via command line that makes me feel like some type of smug hacker, just like tweeting from command line does. I recently cURL'd the Google homepage and saw the following: I found it weird that Google...

  • Developers Have WordPress, Amateurs Have Squarespace, Professional Designers Have the NEW Webydo!

    Web design platforms have traditionally come in one of two varieties. There are the solutions like WordPress and Drupal that are incredibly powerful, but an understanding of web development and coding is required to be able to use those platforms effectively. On the other side of the...

  • Chris Coyierâs Favorite CodePen Demos II

    Hey everyone! Before we get started, I just want to say it’s damn hard to pick this few favorites on CodePen. Not because, as a co-founder of CodePen, I feel like a dad picking which kid he likes best (RUDE). But because there is just so...