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!

O'Reilly Velocity Conference
Save 20% with discount code AFF20

Recent Features

  • Regular Expressions for the Rest of Us

    Sooner or later you’ll run across a regular expression. With their cryptic syntax, confusing documentation and massive learning curve, most developers settle for copying and pasting them from StackOverflow and hoping they work. But what if you could decode regular expressions and harness their power? In...

  • Animated 3D Flipping Menu with CSS

    CSS animations aren't just for basic fades or sliding elements anymore -- CSS animations are capable of much more.  I've showed you how you can create an exploding logo (applied with JavaScript, but all animation is CSS), an animated Photo Stack, a sweet...

Incredible Demos

  • The Simple Intro to SVG Animation

    This article serves as a first step toward mastering SVG element animation. Included within are links to key resources for diving deeper, so bookmark this page and refer back to it throughout your journey toward SVG mastery. An SVG element is a special type of DOM element...

  • Elegant Overflow with CSS Ellipsis

    Overflow with text is always a big issue, especially in a programmatic environment. There's always only so much space but variable content to add into that space. I was recently working on a table for displaying user information and noticed that longer strings were...

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

  • Prevent Chrome from Translating a Page

    A while back I shared my favorite Google Chrome extension:  Google Art Project.  I've enjoyed seeing beautiful art when I open a new tab -- it's brought genuine happiness to my day, however small that happiness may be.  About a week ago, however, the art presented had...

  • Create Any Type Of Website With These Multi-Purpose Themes

    We have selected what we believe are the very best multipurpose WordPress themes on the market today. Our list contains a number of best sellers, several newcomers that are proving to be highly popular, and a few themes that are ideal for creating the types of...

  • An Introduction to Static Site Generators

    Static site generators seem to have been becoming more and more popular recently, but they’re not one of those ephemeral novelty things that grow in popularity as quickly as they fall into oblivion shortly after. For over a decade, many different projects — 394 of...

  • Automated Tests for Visual Responsive Layouts

    Today it's all about testing. In 2015, many developers knows about TDD and I personally think that testing is one of the key for quality products. But what about testing in a Front-end environment? How do you guys write your tests for a responsive page or...

  • Getting Dicey With Flexbox

    What if you could build complex CSS layouts in minutes? Flexbox is a new CSS layout spec that makes it easy to construct dynamic layouts. With flexbox, vertical centering, same-height columns, reordering, and direction agnosticism are a piece of cake. There's a popular myth floating around that...