2012-10-05 24 views
-1

我想删除这是给错误喜欢这里的CSS规则的例子解析css和删除规则,是给错误

.banneritem { 
    border: 1px solid #CED4E0; 
    border color: #CBCBCB;// is not valid cause it actually refers to border-color missing (-) 
    margin-bottom: 10px; 
} 

没有任何框架或库将忽略这种CSS规则从文件。

我使用sabberworm CSS解析器这里我的示例代码

if ($loadedContents != ""){ 
     preg_match_all('/display: none/is', $loadedContents, $matchvalue); 
     if (count($matchvalue[0]) > 0) { 
     $oCssParser = new Sabberworm\CSS\Parser($loadedContents); 
     $oDoc = $oCssParser -> parse(); 
      foreach ($oDoc->getAllRuleSets() as $oRuleSet) { 
       if ($oRuleSet instanceof Sabberworm\CSS\RuleSet\AtRule) { 
        break; 
       } 
       $sSelector = $oRuleSet -> getSelectors(); 
       $sSelector = $sSelector[0] -> getSelector(); 
       $aDisplayRule = $oRuleSet -> getRules('display'); 
       if (count($aDisplayRule) > 0) { 
        $aValues = $aDisplayRule['display'] -> getValues(); 
        if ($aValues[0][0] == "none") { 
          $displayValue[] = "display:none;"; 
          $displaySelector[] = $sSelector; 
        } 
       } 
       $bDisplayRule = $oRuleSet -> getRules('visibility'); 
       if (count($bDisplayRule) > 0) { 
        $bValues = $bDisplayRule['visibility'] -> getValues(); 
        if ($bValues[0][0] == "hidden") { 
         $visibilityValue[] = "visibility:hidden;"; 
         $visibilitySelector[] = $sSelector; 
       } 
       } 
      } 
      } 
     } 

我在这里工作的所有CSS规则,发现显示:在同时无规则由于这种错误的规则,我得到致命错误。

任何帮助将不胜感激。

+0

你可以使用http://www.cleancss.com/ ...一个很好的工具。 –

+1

或less.js(编程的CSS框架 - 也返回在CSS文件中失败)。 – 2012-10-05 11:26:25

+0

@MihaiIorga我想php代码,所以我可以将它添加到我的项目:)谢谢任何方式。 –

回答

0

是的,我找到了解决办法,

首先我把同样的代码,在我上面的问题,然后我创建新的虚拟css创建新功能见下文,

对于我用的两个类名是 1)。 csstidy 2)。 Stylecow

require "../stylecow/autoload.php"; 

    //for css rules omition 

    require('../csstidy/class.csstidy.php'); 

function makeDummyCssFile($html) 
{ 
     $cssTidy = new csstidy(); 
     $newCss =""; 
     foreach ($html->find('link') as $e) { 
     $cssHrefs = $e -> href; 
     preg_match_all('~favicon~is', $cssHrefs, $feviMatch); 
     if (count($feviMatch[0]) == 0) { 
      preg_match_all('~(\bhttp|https\b)~is', $cssHrefs , $isThirdPartyCss); 
      if(count($isThirdPartyCss[0]) > 0) 
      { 
       $loadedHrefs = $cssHrefs; 
      } 
      else 
      { 
       preg_match_all('~' . SITE_NAME . '~is', $cssHrefs, $match); 
       if (count($match[0]) == 0) { 
        $loadedHrefs = SITE_NAME . $cssHrefs; 
       } else { 
        $loadedHrefs = $cssHrefs; 
       } 
      } 

       $loadedContents = file_get_contents($loadedHrefs); 
       $css = Stylecow\Parser::parseFile($loadedContents); 
       $newCss.= $css; 
     } 
    } 



      $result = $cssTidy->parse($newCss); 

      $newCss = $cssTidy->print->plain(); 
      if($result) 
      { 

       foreach($cssTidy->log as $line => $array) 
         { 
          // echo "<pre>";print_r($array); 
          $array_size = count($array); 
          for($i = 0; $i < $array_size; ++$i) 
          { 
           if($array[$i]['t'] == "error") 
           { 

            $newCss = preg_replace("~(".$array[$i]['m']['selector']."[^\}]*\})~is", "", $newCss);#qtip-overlay div[^\}]*\} 
           } 


          } 
         } 

      } 
     $cssName = explode("http://", SITE_NAME); 
     $cssFileName = str_replace(".", "-", str_replace("/","",$cssName[1])) . "-" . date('Y-m-d') . ".css"; 
     $str = ""; 
     $myFile = DUMYPATH . $cssFileName; 
        if ($myFile != "") { 

         $fh = fopen($myFile, 'w+') or die("can't open file"); 
         $stringData = $newCss; 
         fwrite($fh, $stringData); 
         fclose($fh); 
        } 
     return $cssFileName; 
} 

希望这有助于:)

-1

这是我的建议,使用基于LESS,SASS或SCSS的更健壮的解析器。如果您使用Compass这个CSS预处理框架,它将帮助您编写更好的结构化代码并验证CSS。有几个编译时的命令,你可能会发现有用:

-q, --quiet      Quiet mode. 
    --trace      Show a full stacktrace on error 
    --force      Allows compass to overwrite existing files. 
    --dry-run     Dry Run. Tells you what it plans to do. 
    --boring      Turn off colorized output. 
+0

它指的是红宝石我的朋友我正在使用PHP :) –