使用PHP脚本从站点中删除未使用的CSS


Remove unused CSS from site with PHP script

所以我试图写一个PHP脚本做类似http://unused-css.com/的事情-基本上找到所有未使用的CSS在我的网站,并删除它,以创建一个"干净"的CSS文件。

我使用Firefox插件'Dust me'来抓取网站并显示所有未使用的选择器。

Dustme插件以以下格式返回未使用的选择器:

#header #nav
#header #nav p
#header #nav p a    
etc

我的PHP脚本如下:

<?php
//My site CSS (compressed) -- a small test sample
$allcss = 
"body{color:#1c4866;font:13px/16px;}
#header #nav {float: left;}
#header #nav p {font-weight: bold;}
#header #nav p a {color: blue;}
input,textarea,select{font:13px/16px;color:#999;}";

//A sample of unused CSS selectors as returned by The Dustme plugin
$unusedcss =  
"#header #nav
#header #nav p
#header #nav p a";
//and the code:
$rules = preg_split ('/$'R?^/m', $allcss); //Create array from all site css
$remove = preg_split ('/$'R?^/m', $unusedcss); //Create array from unused CSS selectors
$final = array();
foreach ($rules as $rule)
{   
    if (!in_array(substr($rule, 0, strpos($rule, " ")), $remove) )
    $final[] = $rule .= "<br />";
}
 echo implode("'n", $final);

当我将最后的echo结果粘贴到CSS文件中时,CSS的加载已经被删除,甚至是在站点上使用的CSS。

谁能帮我找出问题所在吗?对不起,问题出在哪里,我不能提供更多的帮助。

您是否尝试过替换:

if (!in_array(substr($rule, 0, strpos($rule, " ")), $remove) )
    $final[] = $rule .= "<br />";

:

if (!in_array(substr($rule, 0, strpos($rule, " {")), $remove) ) {
    $final[] = $rule .= "<br />";
}

我在本地尝试了这个,在$final中所有存在于$remove中的条目都不见了。