Уменьшите CSS с помощью preg_replace

Не все является по-настоящему сериализуемым. Возьмите сетевое сокетное соединение, например. Вы могли сериализировать данные/состояние своего объекта сокета, но сущность активного соединения будет потеряна.

5
задан fresskoma 3 July 2013 в 10:53
поделиться

6 ответов

Существуют утилиты, которые могут соответствовать вашим потребностям и избавить вас от потенциально ошибочного регулярного выражения.

Компрессор YUI поддерживает минификацию файлов CSS и javascript.

Вы можете рассмотреть этот или другие существующие варианты, прежде чем писать свои собственные.

5
ответ дан 18 December 2019 в 09:51
поделиться

Не знаю, как вы это сделаете, но вот сценарий, который написал мой друг, довольно быстро сокращает CSS:

function minimize_css($input)
{
    // Remove comments
    $output = preg_replace('#/\*.*?\*/#s', '', $input);
    // Remove whitespace
    $output = preg_replace('/\s*([{}|:;,])\s+/', '$1', $output);
    // Remove trailing whitespace at the start
    $output = preg_replace('/\s\s+(.*)/', '$1', $output);
    // Remove unnecesairy ;'s
    $output = str_replace(';}', '}', $output);
    return $output;
}
9
ответ дан 18 December 2019 в 09:51
поделиться

Это то, что я использую в Samstyle PHP Framework :

$regex = array(
"`^([\t\s]+)`ism"=>'',
"`([:;}{]{1})([\t\s]+)(\S)`ism"=>'$1$3',
"`(\S)([\t\s]+)([:;}{]{1})`ism"=>'$1$3',
"`\/\*(.+?)\*\/`ism"=>"",
"`([\n|\A|;]+)\s//(.+?)[\n\r]`ism"=>"$1\n",
"`(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+`ism"=>"\n"
);
$buffer = preg_replace(array_keys($regex),$regex,$buffer);

Надеюсь, это поможет!

0
ответ дан 18 December 2019 в 09:51
поделиться

Это кажется прекрасным примером того, когда не изобретать заново колесо. Почти каждый сайт в Интернете использует CSS, и все крупные как-то его сжимают. Их методы уже протестированы и оптимизированы. Зачем катить свою собственную, если это не нужно?

Майк и Грумбо уже высказали конкретные предложения, но я просто хотел указать на общий принцип.

1
ответ дан 18 December 2019 в 09:51
поделиться

Насколько я знаю, вы не можете этого сделать, потому что вы фактически меняете шаблон, когда разбиваете его на несколько строк.

Редактировать: и да, +1, чтобы не повторять -изобретая колесо.

0
ответ дан 18 December 2019 в 09:51
поделиться
function minifyCSS($css){
    $css = trim($css);
    $css = str_replace("\r\n", "\n", $css);
    $search = array("/\/\*[^!][\d\D]*?\*\/|\t+/","/\s+/", "/\}\s+/");
    $replace = array(null," ", "}\n");
    $css = preg_replace($search, $replace, $css);
    $search = array("/;[\s+]/","/[\s+];/","/\s+\{\\s+/", "/\\:\s+\\#/", "/,\s+/i", "/\\:\s+\\\'/i","/\\:\s+([0-9]+|[A-F]+)/i","/\{\\s+/","/;}/");
    $replace = array(";",";","{", ":#", ",", ":\'", ":$1","{","}");
    $css = preg_replace($search, $replace, $css);
    $css = str_replace("\n", null, $css);
    return $css;    

}


http: / /mhameen.blogspot.com/2010/04/crystal-script-manger-for-php.html#links

0
ответ дан 18 December 2019 в 09:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: