我正在开发一个函数,通过删除不必要的空格、换行符和制表符以及注释来缩小页面的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