0

私が持っているもの

生のcss文字列を最小化するphpの次の正規表現があります:

function compress( $css ) {
    $css = str_replace('; ',';', $css);
    $css = str_replace(': ',':', $css);
    $css = str_replace(', ',',', $css);

    $css = str_replace(' }','}', $css);
    $css = str_replace('} ','}', $css);

    $css = str_replace('{ ','{', $css);
    $css = str_replace(' {','{', $css);

    $css = str_replace('( ','(', $css);
    $css = str_replace(' (','(', $css);

    $css = str_replace(' )',')', $css);
    $css = str_replace(') ',')', $css);

    $css = str_replace(array("\r\n","\r","\n","\t",'  ','    ','    '),"",preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!','',$css));

    return $css;
}

これは機能しますが、ひどいコードです。

質問

誰かがこれを書くためのより良い方法を知っていますか?

4

3 に答える 3

6

私はこれを何度も経験してきましたが、現在、うまく機能している実装があります。

// comments
$string = preg_replace('!/\*.*?\*/!s','', $string);
$string = preg_replace('/\n\s*\n/',"\n", $string);

// space
$string = preg_replace('/[\n\r \t]/',' ', $string);
$string = preg_replace('/ +/',' ', $string);
$string = preg_replace('/ ?([,:;{}]) ?/','$1',$string);

// trailing;
$string = preg_replace('/;}/','}',$string);

私はこれをTwigフィルターとして実装しています:https ://github.com/catchamonkey/CatchamonkeyAsseticFilterBundle

于 2013-03-14T13:59:14.267 に答える
2

このコードを変更するのはどうですか?

...
$css = str_replace('; ',';', $css);
$css = str_replace(': ',':', $css);
$css = str_replace(', ',',', $css);

$css = str_replace(' }','}', $css);
$css = str_replace('} ','}', $css);

$css = str_replace('{ ','{', $css);
$css = str_replace(' {','{', $css);
...

これに:

$css = str_replace(array('; ',': ',', ',...),array(';',':',',',...),$css);

また、CSSの縮小に既存のライブラリを使用することを検討してください。縮小できるものはたくさんあります。例:margin:0 0 0 0;になることができmargin:0;ます...

于 2013-03-14T13:58:28.910 に答える
1

私はこれをcssに使用します:

//Minify CSS code:
function minifyCSS($sCss) {
    // Compress whitespace.
    $sCss = preg_replace('/\s+/', ' ', $sCss);
    // Remove comments.
    $sCss = preg_replace('/\/\*.*?\*\//', '', $sCss);

    return trim($sCss);
}
于 2013-03-14T13:58:48.767 に答える