<?
$xhtml = '<p style="width: 250px;">This is some text<div class="button">This is the button</div><br><img src="waves.jpg" width="150" height="200" /></p><p><b>Title</b><br>Here is some more text and <a href="#" target="_blank">this is a link</a></p>' ;
$dom = new DOMDocument( ) ;
$dom -> loadHTML ( $xhtml ) ;
function clean( $element , $allowed , $stripped , $prefix = '' ) {
if ( ! $element ) return ;
foreach ( $element -> childNodes as $child ) {
if ( ! isset ( $child -> tagName ) ) continue ; $n = $child -> tagName ;
$toDelete [ ] = $child ;
continue ;
}
foreach ( $child -> attributes as $a )
$attr [ ] = $a -> nodeName ;
foreach ( $attr as $a )
$child -> removeAttribute ( $a ) ;
}
clean( $child , $allowed , $stripped , $prefix . ' ' ) ;
}
foreach ( $toDelete as $del )
$element -> removeChild ( $del ) ;
}
$body = $dom -> getElementsByTagName ( 'body' ) -> item ( 0 ) ;
clean
( $body , array ( 'img' , 'a' ) , array ( 'p' , 'br' , 'b' ) ) ; echo preg_replace ( '#^.*?<body>(.*?)</body>.*$#s' , '$1' , $dom -> saveHTML ( $body ) ) ;
PD8KCiR4aHRtbCA9ICc8cCBzdHlsZT0id2lkdGg6IDI1MHB4OyI+VGhpcyBpcyBzb21lIHRleHQ8ZGl2IGNsYXNzPSJidXR0b24iPlRoaXMgaXMgdGhlIGJ1dHRvbjwvZGl2Pjxicj48aW1nIHNyYz0id2F2ZXMuanBnIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjIwMCIgLz48L3A+PHA+PGI+VGl0bGU8L2I+PGJyPkhlcmUgaXMgc29tZSBtb3JlIHRleHQgYW5kIDxhIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj50aGlzIGlzIGEgbGluazwvYT48L3A+JzsKCiRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKJGRvbS0+bG9hZEhUTUwoJHhodG1sKTsKCmZ1bmN0aW9uIGNsZWFuKCRlbGVtZW50LCAkYWxsb3dlZCwgJHN0cmlwcGVkLCAkcHJlZml4ID0gJycpewogICAgaWYoIWlzX2FycmF5KCRhbGxvd2VkKSB8fCAhIGlzX2FycmF5KCRzdHJpcHBlZCkpIHJldHVybjsKICAgIGlmKCEkZWxlbWVudClyZXR1cm47CiAgICAkdG9EZWxldGUgPSBhcnJheSgpOwogICAgZm9yZWFjaCgkZWxlbWVudC0+Y2hpbGROb2RlcyBhcyAkY2hpbGQpewogICAgICAgIGlmKCFpc3NldCgkY2hpbGQtPnRhZ05hbWUpKWNvbnRpbnVlOwogICAgICAgICRuID0gJGNoaWxkLT50YWdOYW1lOwogICAgICAgIGlmICgkbiAmJiAhaW5fYXJyYXkoJG4sICRhbGxvd2VkKSAmJiAhaW5fYXJyYXkoJG4sICRzdHJpcHBlZCkpewogICAgICAgICAgICAkdG9EZWxldGVbXSA9ICRjaGlsZDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmKCRuICYmIGluX2FycmF5KCRuLCAkc3RyaXBwZWQpKXsKICAgICAgICAgICAgJGF0dHIgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCRjaGlsZC0+YXR0cmlidXRlcyBhcyAkYSkKICAgICAgICAgICAgICAgICRhdHRyW10gPSAkYS0+bm9kZU5hbWU7CiAgICAgICAgICAgIGZvcmVhY2goJGF0dHIgYXMgJGEpCiAgICAgICAgICAgICAgICAkY2hpbGQtPnJlbW92ZUF0dHJpYnV0ZSgkYSk7CiAgICAgICAgfQogICAgICAgIGNsZWFuKCRjaGlsZCwgJGFsbG93ZWQsICRzdHJpcHBlZCwgJHByZWZpeC4nICAnKTsKICAgIH0KICAgIGZvcmVhY2ggKCR0b0RlbGV0ZSBhcyAkZGVsKQogICAgICAgICRlbGVtZW50LT5yZW1vdmVDaGlsZCgkZGVsKTsKfQokYm9keSA9ICRkb20tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JyktPml0ZW0oMCk7CmNsZWFuKCRib2R5LCBhcnJheSgnaW1nJywgJ2EnKSwgYXJyYXkoJ3AnLCAnYnInLCAnYicpKTsKZWNobyBwcmVnX3JlcGxhY2UoJyNeLio/PGJvZHk+KC4qPyk8L2JvZHk+LiokI3MnLCAnJDEnLCAkZG9tLT5zYXZlSFRNTCgkYm9keSkpOw==