سؤال

أنا استخدم PHP.

أنا أعمل في وسيلة لإعادة تلقائيا جميع ملفات CSS الخاصة بي تلقائيا. قمت تلقائيا بتحميل ملفات CSS ثم يحفظها على واحد أكبر، للتحميل.

في التثبيت المحلي لدي بعض خطوط Apimport التي يجب إزالتها.

تبدو هكذا:

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

إذا كان النمط أعلاه ضمن سلسلة، كيف يمكنني أن أفضل طريقة استبدال خطوط الاستيراد @ مع preg_replace أو أفضل؟ سيكون من الجيد عدم ترك فجوة بيضاء.

هل كانت مفيدة؟

المحلول

هذا يجب التعامل معها عبر Regex:

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

نصائح أخرى

يمكنك بسهولة تكرار أكثر من كل سطر ثم تحديد ما إذا كان يبدأ بتضمين @.

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

str_replace ("@ استيراد"، ''، $ str)؛

قد يكون من الأسهل العثور على imports باستخدام preg_match، ثم استبدالها باستخدام 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);
}

بقدر ما تجريد كل خطوط جميع الخطوط

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

يجب القيام بهذه المهمة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top