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

时间:2013-02-04 16:56:41

标签: php string escaping

我正在开发一个函数,通过删除不必要的空格,换行符和制表符以及来自它的注释来缩小页面的HTML代码。 但是,我想保留以

开头的标签
 "<!-- google_ad_section... -->"

因为他们告诉Google我的页面的哪些部分需要强调。

我目前修改代码的代码片段是在这个伟大网站上的另一个地方找到的代码片段。我理解参数编码与第二个参数的第一部分清除所有注释有关...但是如何保留包含“google_ad_section”字符串的所有标记?

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

2 个答案:

答案 0 :(得分:2)

这个解决方案怎么样:

  • 通过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%准确。

答案 1 :(得分:1)

请务必查看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输出,您需要使用zlib.output_compression = On在php.ini文件中为站点范围或在运行时使用

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

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