2013-02-04 24 views
2

我正在研究一个函数,通过去除不必要的空格,换行符和制表符以及它的注释来缩小我的页面的HTML代码。 不过,我想保持标签与缩小HTML输出,但保留某些标记

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

起他们告诉我的谷歌页面的部分,以强调它。

我目前的代码片段来修剪代码是这个,在这个伟大的网站上的另一个地方找到。我理解尽可能多的参数编码,以实现第二个参数的第一部分清除所有评论..但我怎样才能保留包含“google_ad_section”字符串的所有标签?

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

它通常被称为“来缩小“而不是”消毒“。 –

+0

感谢提示,我改变了标题。 – richey

回答

2

这个怎么样的解决方案:

  • 通过DOMDocument
  • 运行HTML使用的选项preserveWhiteSpacefalse去除所有多余的空格
  • 过滤器的所有评论认为不喜欢的人,你需要

也许它可能会l ook像这样:

$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

一定要检查strip_tags()函数;特别是第二个参数。

strip_tags($html_string,$allowable_tags); 

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

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

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工作=在无论是在站点范围内或在运行时的php.ini文件与

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

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

+0

谢谢,但根据文档,我不能将它用于此特定用途,因为标签格式化为注释并且还包含空格,而strip_tags()函数都会“杀死”这两个空格。 – richey