HTML миниатюрное простое пространство для переполнения стека

Я пытаюсь найти простой пример минификации, который будет делать следующее:

  1. Удалить все пробелы слева от каждой строки
  2. Удалить все несколько новых строк
  3. Держите все другие разрывы строк в такте.

Итак, это:

<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'
);

Но это идет слишком далеко за то, что мне нужно.

Что-то простое было бы идеально.

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

2

Другие решения

Замена каждой последовательности пробельных символов на первый пробел в последовательности работает для вашего примера, но я не знаю о более сложном HTML-коде.

$s = preg_replace("/(\s)\s+/", "$1", $s);
0

По вопросам рекламы [email protected]