Как удалить пустые теги html (содержащие пробелы и / или их html-коды)

Нужно регулярное выражение для preg_replace.

На этот вопрос не ответил «другой вопрос», потому что не все теги, которые я хочу удалить, не пусты.

Мне нужно не только удалить пустые теги из структуры HTML, но также теги, содержащие разрывы строк, а также пробелы и / или их html-код.

Возможные коды:

<br /> & nbsp; & Thinsp; & EnSP; & ЕПРС; & # 8201; & # 8194; & # 8195;

ПЕРЕД удалением совпадающих тегов:

<div> <h1>This is a html structure.</h1> <p>This is not empty.</p> <p></p> <p><br /></p> <p> <br /> &;thinsp;</p> <p>&nbsp;</p> <p> &nbsp; </p> </div> 

ПОСЛЕ удаления совпадающих тегов:

 <div> <h1>This is a html structure.</h1> <p>This is not empty.</p> </div> 

Вы можете использовать следующее:

 <([^>\s]+)[^>]*>(?:\s*(?:<br \/>|&nbsp;|&thinsp;|&ensp;|&emsp;|&#8201;|&#8194;|&#8195;)\s*)*<\/\1> 

И замените на '' (пустая строка)

См. DEMO

Примечание. Это также будет работать для пустых html-тегов с атрибутами.

Использование аккуратно Использует следующую функцию:

 function cleaning($string, $tidyConfig = null) { $out = array (); $config = array ( 'indent' => true, 'show-body-only' => false, 'clean' => true, 'output-xhtml' => true, 'preserve-entities' => true ); if ($tidyConfig == null) { $tidyConfig = &$config; } $tidy = new tidy (); $out ['full'] = $tidy->repairString ( $string, $tidyConfig, 'UTF8' ); unset ( $tidy ); unset ( $tidyConfig ); $out ['body'] = preg_replace ( "/.*<body[^>]*>|<\/body>.*/si", "", $out ['full'] ); $out ['style'] = '<style type="text/css">' . preg_replace ( "/.*<style[^>]*>|<\/style>.*/si", "", $out ['full'] ) . '</style>'; return ($out); } 

Я не очень хорошо знаком с регулярным выражением, но попробуйте это

 \<.*\>\s*\&.*sp;\s*\<\/.*\>|\<.*\>\s*\<\s*br\s*\/\>\s*\&.*sp;\s*\<\/.*\>|\<.*\>\s*\&.*sp;\s*\<\s*br\s*\/\>\<\/.*\> 

В основном соответствует

  • Теги с элементами пространства HTML в них ИЛИ
  • Теги с разрывами, встречающимися перед элементами пространства HTML в них
  • Теги с разрывами, возникающими после элементов пространства HTML в них