Удалить пробел из html

У меня есть html-код:

<div class="wrap"> <div> <div id="hmenus"> <div class="nav mainnavs"> <ul> <li><a id="nav-questions" href="/questions">Questions</a></li> <li><a id="nav-tags" href="/tags">Tags</a></li> <li><a id="nav-users" href="/users">Users</a></li> <li><a id="nav-badges" href="/badges">Badges</a></li> <li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li> </ul> </div> </div> </div> </div> 

Как удалить пробел между тегами по php?

Мы должны получить:

 <div class="wrap"><div><div id="hmenus"><div class="nav mainnavs"><ul><li><a id="nav-questions" href="/questions">Questions</a></li><li><a id="nav-tags" href="/tags">Tags</a></li><li><a id="nav-users" href="/users">Users</a></li><li><a id="nav-badges" href="/badges">Badges</a></li><li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li></ul></div></div></div></div> 

Related of "Удалить пробел из html"

Вам не нужно.

Сжатие GZip является особенностью всех современных веб-серверов и значительно превосходит любые «выигрыши», которые вы можете увидеть, используя это при доставке контента.

Не делай этого. Нет никакого смысла. Для этого и был сделан gzip.

$html = preg_replace('~>\s+<~', '><', $html);

Но я не вижу смысла в этом. Если вы пытаетесь уменьшить размер данных, есть лучшие варианты.

Прошло некоторое время с тех пор, как этот вопрос был впервые задан, но я все еще вижу необходимость опубликовать этот ответ, чтобы помочь людям с той же проблемой.

Ни одно из этих решений не было принято для меня, поэтому я придумал это решение: Использование output_buffer .

Функция ob_start принимает обратный вызов в качестве аргумента, который применяется ко всей строке перед ее выводом. Поэтому, если вы удалите пробел из строки перед тем, как очистить вывод, вы все сделали.

 /** * Remove multiple spaces from the buffer. * * @var string $buffer * @return string */ function removeWhitespace($buffer) { return preg_replace('/\s+/', ' ', $buffer); } ob_start('removeWhitespace'); <!DOCTYPE html> <html> <head></head> <body></body> </html> ob_get_flush(); 

Вышеприведенное будет печатать что-то вроде:

 <!DOCTYPE html> <html> <head> </head> <body> </body> </html> 

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

 $html = preg_replace('~>\s*\n\s*<~', '><', $html); 

Я думаю, что это решение проблемы <b>Hello</b> <i>world</i> . Идея состоит в том, чтобы удалить пробелы только тогда, когда есть новая строка. Он будет работать для общего синтаксиса HTML, который:

 <div class="wrap"> <div> </div> </div> 

на случай, если кому-то это понадобится, я придумал функцию от ответа @Martin Angelova и @Savas Vedova, и придумал

 <?php function rmspace($buffer){ return preg_replace('~>\s*\n\s*<~', '><', $buffer); }; ?> <?php ob_start("rmspace"); ?> //Content goes in here <?php ob_end_flush(); ?> 

И это решило мою проблему. Примечание. Я не тестировал накладные расходы сервера, убедитесь, что вы проверили перед использованием в производстве

Замена RegEx может сделать трюк, что-то вроде:

 $result = preg_replace('!\s+!smi', ' ', $content); 

Спасибо, что опубликовали этот вопрос. Проблема в том, что проблема связана с ошибками в некоторых средах. Хотя решение регулярных выражений работает в общем случае, для быстрого взлома удаляет ведущие пробелы и добавляет теги в конец каждой строки. PHP удаляет новую строку после закрытия?>. Например:

 <ul><?php ?> <li><a id="nav-questions" href="/questions">Questions</a></li><?php ?> <li><a id="nav-tags" href="/tags">Tags</a></li><?php ?> <li><a id="nav-users" href="/users">Users</a></li><?php ?> <li><a id="nav-badges" href="/badges">Badges</a></li><?php ?> <li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li><?php ?> </ul> 

Очевидно, что это неоптимально по целому ряду причин, но оно будет работать для локализованной проблемы, не затрагивая всю цепочку инструментов.

Функция array reduce :

 $html = explode("\n", $html); function trimArray($returner, $value) { $returner .= trim($value); return $returner; } echo $html = array_reduce($html, 'trimArray'); 

Как сообщение gpupo предоставило самое чистое решение для разных типов форматирования интервалов. Однако в конце была забыта небольшая, но важная часть! Окончательная обрезка строки: -p

Ниже приведено тестовое и рабочее решение.

 function compress_html($content) { $i = 0; $content = preg_replace('~>\s+<~', '><', $content); $content = preg_replace('/\s\s+/', ' ', $content); while ($i < 5) { $content = str_replace(' ', ' ', $content); $i++; } return trim($content); } 

Используйте регулярные выражения, например:

 >(\s).*?< 
 //... public function compressHtml($content) { $content = preg_replace('~>\s+<~', '><', $content); $content = preg_replace('/\s\s+/', ' ', $content); $i = 0; while ($i < 5) { $content = str_replace(' ', ' ', $content); $i++; } return $content; } 
 <?php define(COMPRESSOR, 1); function remove_html_comments($content = '') { return preg_replace('/<!--(.|\s)*?-->/', '', $content); } function sanitize_output($buffer) { $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' ); $buffer = preg_replace($search, $replace, $buffer); return remove_html_comments($buffer); } if(COMPRESSOR){ ob_start("sanitize_output"); } ?> <html> <head> <!-- comment --> <title>Example 1</title> </head> <body> <p>This is example</p> </body> </html> RESULT: <html><head><title>Example 1</title></head><body><p>This is example</p></body></html>