0

cssファイルをphp配列に分割したい。私はこのコードを持っています:

function parseCss($css_str) {
    $css = array();

    // TODO include external css
    $css_str = preg_replace('/(@import\s+["\'].+["\'];)/', "", $css_str);

    // Strip all line endings and both single and multiline comments
    $css_str = preg_replace('/\s*(?!<\")\/\*+[^\*]+\*+\/(?!\")\s*/', "", $css_str);

    $css_class = explode("}", $css_str);

    while(list($key, $value) = each($css_class)){

        $aCSSObj = explode("{", $value);
        $cssSelector = strtolower(trim($aCSSObj[0]));
        if($cssSelector){
                // regular class not in media query
                $cssprops[] = $cssSelector;
                $a = explode(";", $aCSSObj[1]);
                while(list($key, $val0) = each($a)){
                    if(trim($val0)){
                        $aCSSSub = explode(":", $val0);
                        $cAtt = strtolower(trim($aCSSSub[0]));
                        if(isset($aCSSSub[1])){
                            $aCSSItem[$cAtt] = trim($aCSSSub[1]);
                        }
                    }
                }
                if((isset($css[$cssSelector])) && ($css[$cssSelector])){
                    $aCSSItem = array_merge($css[$cssSelector], $aCSSItem);
                }
                $css[$cssSelector] = (isset($aCSSItem)) ? $aCSSItem : null ;
                unset($aCSSItem);       
        }
        if(strstr($cssSelector, ",") && !strstr($cssSelector, "@media")){
            $aTags = explode(",", $cssSelector);
            print_r($aTags);
            foreach($aTags as $key0 => $value0){
                $css[$value0] = $css[$cssSelector];
            }
            unset($css[$cssSelector]);
        }
    }
    unset($css_str, $css_class, $aCSSSub, $aCSSItem, $aCSSObj);
    return $css;
}

しかし、それは本来あるべきメディアクエリを含む css ファイルを返してくれません。css 値に「:」記号がある場合 - たとえば、次のような IE 式:

top:expression((-20+(document.documentElement.clientHeight ?document.documentElement.clientHeight/2:document.body.clientHeight/2)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop))+'px')

カットされたコードを返します。

結果は次のようになります。

Array
(
    [selector] => array (
            [prop] => value
            [prop2] => value
    )

    [@media handheld,only screen and (max-width:320px)] => array(
        [selector] => array(
                [prop] => value
                [prop2] => value
        )
    )
)

どうすれば機能しますか?

4

1 に答える 1

0

それを解決しました!最終的に、CSSTidy を使用して CSS を解析しましたが、見事に機能します。 http://csstidy.sourceforge.net/index.php

于 2013-08-25T01:59:43.633 に答える