0

私はPHPを使用しています。

すべての CSS ファイルを自動的に 1 つにまとめる方法に取り組んでいます。CSS ファイルを自動的にロードし、アップロード用に大きなファイルに保存します。

私のローカル インストールには、削除する必要がある @import 行がいくつかあります。

次のようになります。

@import url('css/reset.css');
@import url('css/grid.css');
@import url('css/default.css');
@import url('css/header.css');
@import url('css/main.css');
@import url('css/sidebar.css');
@import url('css/footer.css');
body { font: normal 0.75em/1.5em Verdana; color: #333; }

上記のスタイルが文字列内にある場合、@import-lines を preg_replace またはそれ以上に置き換える最善の方法は? 空白のギャップを残さない方がよいでしょう。

4

4 に答える 4

3

これは正規表現を介して処理する必要があります:

preg_replace('/\s*@import.*;\s*/iU', '', $text);
于 2010-01-06T20:15:43.853 に答える
1

各行を簡単に反復して、@import で始まるかどうかを判断できます。

$handle = @fopen('/path/to/file.css', 'r');
if ($handle) {
    while (!feof($handle)) {
        $line = fgets($handle, 4096);
        if (strpos($line, '@import') !== false) {
            // @import found, skip over line
            continue;
        }
        echo $line;
    }
    fclose($handle);
}

または、ファイルを前もって配列に保存する場合は、次のようにします。

$lines = file('/path/to/file.css');
foreach ($lines as $num => $line) {
    if (strpos($line, '@import') !== false) {
        // @import found, skip over line
        continue;
    }
}
于 2010-01-06T20:09:48.117 に答える
0

str_replace("@import", '', $str);

于 2010-01-06T20:08:19.930 に答える
0

preg_match を使用して @import を見つけてから、str_replace を使用してそれらを置き換える方が簡単かもしれません

$str = "<<css data>>";
while (preg_match("/@import\s+url\('([^']+)'\);\s+/", $str, $matches)) {
  $url = $matches[1];
  $text = file_get_contents($url); // or some other way of reading that url
  $str = str_replace($matches[0], $text, $str);
}

すべての @import 行のみを削除する限り:

preg_replace("/@import[^;]+;\s+/g", "", $str);

仕事をするべき...

于 2010-01-06T20:15:27.397 に答える