最小化HTML输出,但保留某些标记


Minify HTML output, but preserve certain tags

我正在开发一个函数,通过删除不必要的空格、换行符和制表符以及注释来缩小页面的HTML代码。然而,我想保留从开始的标签

 "<!-- google_ad_section... -->"

当他们告诉谷歌我页面的哪些部分需要强调时。

我目前修剪代码的代码片段是这样的,可以在这个伟大的网站上的另一个地方找到。我和参数编码一样理解第二个参数的第一部分清除了所有注释。。但是我如何保留所有包含"google_ad_section"字符串的标签呢?

function sanitize_output2($buffer){
return preg_replace(
array(
    '/ {2,}/',
    '/<!--.*?-->|'t|(?:'r?'n[ 't]*)+/s'
),
array(
    ' ',
    ''
),
$buffer
);
}

这个解决方案怎么样:

  • 通过DOMDocument运行HTML
  • 将选项preserveWhiteSpace与false一起使用可以删除所有多余的空白
  • 筛选所有与您需要的评论不同的评论

也许它看起来像这样:

$html = '<html>[…]</html>';
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false; 
$doc->loadHtml($html);
$xpath = new DOMXPath($doc);
$comments = $xpath->query('//comment()');
foreach ($comments as $comment) {
    if (!preg_match('/^google_ad_section /', $comment->nodeValue)) {
        $comment->parentNode->removeChild($comment);
    }
}
$html = $doc->saveHTML();

我把这个记下来了,但没有测试。所以也许它不是100%准确的。

请务必检查strip_tags()函数;尤其是第二参数。

strip_tags($html_string,$allowable_tags);

http://php.net/manual/en/function.strip-tags.php

以及trim()函数;再次检查第二个参数。

 trim($html_string,$charlist)

http://www.php.net/manual/en/function.trim.php

您可能还想看看Apache的mod_deflate,它将压缩输出。

http://httpd.apache.org/docs/2.2/mod/mod_deflate.html

但这只适用于HTML文件。要压缩PHP输出,您需要在PHP.ini文件中使用zlib.output_compression=On进行站点范围的压缩,或者在运行时使用

ini_set("zlib.output_compression", "On");

http://php.net/manual/en/zlib.configuration.php