Нужно регулярное выражение для 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> </p> <p> </p> </div>
ПОСЛЕ удаления совпадающих тегов:
<div> <h1>This is a html structure.</h1> <p>This is not empty.</p> </div>
Вы можете использовать следующее:
<([^>\s]+)[^>]*>(?:\s*(?:<br \/>| | | | | | | )\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*\/\>\<\/.*\>
В основном соответствует