elements to tables $blockquoteTemplate = '
$1

'; $element['text'] = preg_replace('/
(.*?)<\/blockquote>/s', $blockquoteTemplate, $element['text']); // add line breaks after tags $element['text'] = preg_replace('/(<\/(ul|ol|h\d)>)/', '$1
', $element['text']); $element['text'] = self::removeEmptyHTMLTags($element['text']); // convert empty

tags to line breaks $element['text'] = preg_replace('/<\/p>/', '
', $element['text']); // convert

to $element['text'] = preg_replace('/

(.*?)<\/p>/', '
$1
', $element['text']); $element['text'] = preg_replace('/(.*?)<\/p>/', '
$2
', $element['text']); // remove the last break line $element['text'] = preg_replace('/
([^
]*)$/s', '', $element['text']); $template = ' ' . $element['text'] . ' '; return $template; } static function removeEmptyHTMLTags($html) { $pattern = <<<'EOD' ~ < (?: !--[^-]*(?:-(?!->)[^-]*)*-->[^<]*(*SKIP)(*F) # skip comments | ( # group 1 (span|em|strong) # tag name in group 2 [^"'>]* #'"# all that is not a quote or a closing angle bracket (?: # quoted attributes "[^\\"]*(?:\\.[^\\"]*)*+" [^"'>]* #'"# double quote | '[^\\']*(?:\\.[^\\']*)*+' [^"'>]* #'"# single quote )*+ > \s* (?: \s* # html comments | <(?1) \s* # recursion with the group 1 )*+ # closing tag ) # end of the group 1 ) ~sxi EOD; return preg_replace($pattern, '', $html); } }