Я пытаюсь найти простой пример минификации, который будет делать следующее:
Итак, это:
<div class="container">
<div class="row">
<div class="col-sm-12">
//content here
</div>
</div>
</div>
Стало бы это:
<div class="container">
<div class="row">
<div class="col-sm-12">
//content here
</div>
</div>
</div>
Все по-своему, без лишних новых строк.
Я нашел несколько более экстремальных минифинеров, таких как этот:
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array(
'>',
'<',
'\\1'
);
Но это идет слишком далеко за то, что мне нужно.
Что-то простое было бы идеально.
explode
каждая строка в массиве. использование trim
удалить пробелы. Тогда используйте array_filter
удалить пустые строки. Наконец, объедините оставшиеся элементы вместе с implode
,
function minify($html) {
$lines = explode(PHP_EOL, $html);
array_walk($lines, function(&$line) {
$line = trim($line);
});
$lines = array_filter($lines, function($line) {
return $line !== '';
});
return implode(PHP_EOL, $lines);
}
Демо-версия: https://ideone.com/dG71fL
Замена каждой последовательности пробельных символов на первый пробел в последовательности работает для вашего примера, но я не знаю о более сложном HTML-коде.
$s = preg_replace("/(\s)\s+/", "$1", $s);