用 PHP 自动过滤输出中的所有 HTML 注释(全局生效)

PHP wes 15 hours ago (2026-04-14) 34 views

        如果不想逐个修改模板,可以在主题的 functions.php 中添加一个输出过滤器,自动删除所有 HTML 注释(<!– … –>)。注意:这会删除所有注释,包括 IE 条件注释等可能有用的注释,需谨慎使用。


代码示例:


/**
 * 过滤最终输出的 HTML,删除所有 <!-- 注释 -->
 */
function remove_html_comments_from_output( $buffer ) {
    // 正则匹配所有 HTML 注释,但保留 IE 条件注释(可选)
    $pattern = '/<!--(?!\s*(?:\[if[^\]]+\]|<!)\s*)(.*?)-->/s';
    return preg_replace( $pattern, '', $buffer );
}

function start_output_buffer() {
    ob_start( 'remove_html_comments_from_output' );
}
add_action( 'template_redirect', 'start_output_buffer' );



说明:


  • ob_start 会捕获即将发送到浏览器的整个 HTML 输出。

  • 回调函数用正则删除所有非条件注释的 <!– … –>。

  • 如果想保留所有注释,则不应使用此方法。

优点:

  • 一次性生效,无需修改模板。

  • 对任何主题都有效。

缺点:

  • 增加了轻微的性能开销(输出缓冲+正则)。

  • 可能会误删某些有用的注释(如调试信息、条件注释等)。