Skip to content

Instantly share code, notes, and snippets.

@supermethod
Created April 11, 2011 11:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save supermethod/913378 to your computer and use it in GitHub Desktop.
Save supermethod/913378 to your computer and use it in GitHub Desktop.
Close open tags and remove certain html for CDATA inclusion
//from http://codesnippets.joyent.com/posts/show/959
function close_dangling_tags($html){
#put all opened tags into an array
preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result);
$openedtags=$result[1];
#put all closed tags into an array
preg_match_all("#</([a-z]+)>#iU",$html,$result);
$closedtags=$result[1];
$len_opened = count($openedtags);
# all tags are closed
if(count($closedtags) == $len_opened){
return $html;
}
$openedtags = array_reverse($openedtags);
# close tags
for($i=0;$i < $len_opened;$i++) {
if (!in_array($openedtags[$i],$closedtags)){
$html .= '</'.$openedtags[$i].'>';
} else {
unset($closedtags[array_search($openedtags[$i],$closedtags)]);
}
}
return $html;
}
//remove html and wrap remaining in CDATA
function removeHTML($string) {
$string = strip_tags($string, '<p><span class="intro"><h3><h4><h5><li>');
$string = close_dangling_tags($string);
return '<![CDATA['.$string.']]>';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment