Question

J'utilise PHP.

Je travaille sur un moyen de mettre automatiquement ensemble tous mes fichiers CSS en un seul. Je charge automatiquement les fichiers CSS et les enregistre alors une plus grande, pour le téléchargement.

Dans mon installation locale, j'ai quelques lignes @import qui doivent être supprimés.

Il ressemble à ceci:

@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; }

Si le style ci-dessus est dans une chaîne, comment puis-je la meilleure façon remplacer les lignes d'import-@ avec preg_replace ou mieux? Ce serait bien de ne pas laisser un espace espace.

Était-ce utile?

La solution

Cela devrait gérer via regex:

preg_replace('/\s*@import.*;\s*/iU', '', $text);

Autres conseils

Vous pouvez facilement itérer sur chaque ligne, puis déterminer si elle commence par @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);
}

Ou si vous voulez stocker le fichier dans un tableau à l'avant:

$lines = file('/path/to/file.css');
foreach ($lines as $num => $line) {
    if (strpos($line, '@import') !== false) {
        // @import found, skip over line
        continue;
    }
}

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

Il est peut-être plus facile de trouver les @imports utilisant preg_match, puis les remplacer en utilisant 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);
}

En ce qui concerne stripping que toutes les lignes @import:

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

devrait faire le travail ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top