Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析css并删除产生错误的规则_Php_Parsing_Css Parsing_Php Parser - Fatal编程技术网

Php 解析css并删除产生错误的规则

Php 解析css并删除产生错误的规则,php,parsing,css-parsing,php-parser,Php,Parsing,Css Parsing,Php Parser,我想删除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

我想删除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规则和发现显示:没有规则,同时由于这个错误的规则,我得到了致命的错误


任何帮助都将不胜感激

我建议使用基于LESS、SASS或SCSS的更健壮的解析器。如果您使用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.

是的,我找到了解决办法

首先,我使用了与上述问题相同的代码,然后我创建了新的虚拟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;
}
需要“./stylecow/autoload.php”;
//对于css规则省略
需要('../csstidy/class.csstidy.php');
函数makedummycsfile($html)
{
$cssTidy=新cssTidy();
$newCss=“”;
foreach($html->find('link')作为$e){
$cssHrefs=$e->href;
preg_match_all('~favicon~is',$cssHrefs,$feviMatch);
if(计数($feviMatch[0])==0){
preg_match_all(‘~(\bhttp | https\b)~is’,$cshrefs,$isThirdPartyCss);
如果(计数($isThirdPartyCss[0])>0)
{
$loadedHrefs=$cssHrefs;
}
其他的
{
preg_match_all('~'.SITE_NAME'.~is',$cshrefs,$match);
如果(计数($match[0])==0){
$loadedHrefs=站点名称。$cssHrefs;
}否则{
$loadedHrefs=$cssHrefs;
}
}
$loadedContents=file\u get\u contents($loadedHrefs);
$css=Stylecow\Parser::parseFile($loadedContents);
$newCss.=$css;
}
}
$result=$cssTidy->parse($newCss);
$newCss=$cssTidy->print->plain();
如果($结果)
{
foreach($cssTidy->log as$line=>$array)
{
//echo”“;print_r($array);
$array\u size=计数($array);
对于($i=0;$i<$array_size;++$i)
{
if($array[$i]['t']==“error”)
{
$newCss=preg\u replace(“~”(“$array[$i]['m']['selector'.“[^\}]*\})~is“,”,$newCss);#qtip overlay div[^\}]*\}
}
}
}
}
$cssName=explode(“http://”,站点名称);
$cssFileName=str_replace(“.”、“-”、str_replace(“/”、“”、$cssName[1]))。"-" . 日期(“Y-m-d”)。“.css”;
$str=”“;
$myFile=DUMYPATH$cssFileName;
如果($myFile!=“”){
$fh=fopen($myFile,'w+')或die(“无法打开文件”);
$stringData=$newCss;
fwrite($fh,$stringData);
fclose($fh);
}
返回$cssFileName;
}

希望这有帮助:)

您可以使用。。。一个不错的工具。或更少的。js(编程css框架-也返回css文件中的失败)。@MihaiIorga我想要php代码,以便我可以将其添加到我的项目:)谢谢。这是css唯一的错误吗?或者除了缺少破折号之外还会有其他错误吗编辑:我正在使用sabberworm css解析器,这种规则给了我致命的错误,我正在更新我的问题以获得更好的解释。