<?php
function closeTags( &$html, $length = 20 ){
$counter = 0;
$i=0;
while( ($i<$htmlLength) && ($counter<$length) ){
if( $html[$i]=="<" ){
$currentTag = "";
$i++;
if( ($i<$htmlLength) && ($html[$i]!="/") ){
while( ($i<$htmlLength) && ($html[$i]!=">") && ($html[$i]!="/") ){
$currentTag .= $html[$i];
$i++;
}
if( $html[$i] == "/" ){
do{ $i++; } while( ($i<$htmlLength) && ($html[$i]!=">") );
} else {
$currentTag = explode(" ", $currentTag); $unclosed[] = $currentTag[0];
}
} elseif( $html[$i]=="/" ){
do{ $i++; } while( ($i<$htmlLength) && ($html[$i]!=">") );
}
} else{
$counter++;
}
$i++;
}
$result = substr($html, 0, $i-1); foreach( $unclosed as $tag ) $result .= '</'.$tag.'>';
}
$html = "<div>123890<span>1234<img src='i.png' /></span>567890<div><div style='test' class='nice'>asfaasf";
closeTags( $html, 20 );
?>
ICAgIDw/cGhwCiAgICBmdW5jdGlvbiBjbG9zZVRhZ3MoICYkaHRtbCwgJGxlbmd0aCA9IDIwICl7CiAgICAJJGh0bWxMZW5ndGggPSBzdHJsZW4oJGh0bWwpOwogICAgCSR1bmNsb3NlZCA9IGFycmF5KCk7CiAgICAJJGNvdW50ZXIgPSAwOwogICAgCSRpPTA7CiAgICAJd2hpbGUoICgkaTwkaHRtbExlbmd0aCkgJiYgKCRjb3VudGVyPCRsZW5ndGgpICl7CiAgICAJCWlmKCAkaHRtbFskaV09PSI8IiApewogICAgCQkJJGN1cnJlbnRUYWcgPSAiIjsKICAgIAkJCSRpKys7CiAgICAJCQlpZiggKCRpPCRodG1sTGVuZ3RoKSAmJiAoJGh0bWxbJGldIT0iLyIpICl7CiAgICAJCQkJd2hpbGUoICgkaTwkaHRtbExlbmd0aCkgJiYgKCRodG1sWyRpXSE9Ij4iKSAmJiAoJGh0bWxbJGldIT0iLyIpICl7CiAgICAJCQkJCSRjdXJyZW50VGFnIC49ICRodG1sWyRpXTsKICAgIAkJCQkJJGkrKzsKICAgIAkJCQl9CiAgICAJCQkJaWYoICRodG1sWyRpXSA9PSAiLyIgKXsgIAogICAgCQkJCQlkb3sgJGkrKzsgfSB3aGlsZSggKCRpPCRodG1sTGVuZ3RoKSAmJiAoJGh0bWxbJGldIT0iPiIpICk7CQogICAgCQkJCX0gZWxzZSB7CiAgICAJCQkJCSRjdXJyZW50VGFnID0gZXhwbG9kZSgiICIsICRjdXJyZW50VGFnKTsKICAgIAkJCQkJJHVuY2xvc2VkW10gPSAkY3VycmVudFRhZ1swXTsKICAgIAkJCQl9CiAgICAJCQl9IGVsc2VpZiggJGh0bWxbJGldPT0iLyIgKXsKICAgIAkJCQlhcnJheV9wb3AoJHVuY2xvc2VkKTsKICAgIAkJCQlkb3sgJGkrKzsgfSB3aGlsZSggKCRpPCRodG1sTGVuZ3RoKSAmJiAoJGh0bWxbJGldIT0iPiIpICk7CiAgICAJCQl9CiAgICAJCX0gZWxzZXsKICAgIAkJCSRjb3VudGVyKys7CQogICAgCQl9CiAgICAJCSRpKys7CiAgICAJfQogICAgCSRyZXN1bHQgPSBzdWJzdHIoJGh0bWwsIDAsICRpLTEpOwogICAgCSR1bmNsb3NlZCA9IGFycmF5X3JldmVyc2UoICR1bmNsb3NlZCApOwogICAgCWZvcmVhY2goICR1bmNsb3NlZCBhcyAkdGFnICkgJHJlc3VsdCAuPSAnPC8nLiR0YWcuJz4nOwogICAgCXByaW50X3IoJHJlc3VsdCk7CiAgICB9CiAgICAKICAgICRodG1sID0gIjxkaXY+MTIzODkwPHNwYW4+MTIzNDxpbWcgc3JjPSdpLnBuZycgLz48L3NwYW4+NTY3ODkwPGRpdj48ZGl2IHN0eWxlPSd0ZXN0JyBjbGFzcz0nbmljZSc+YXNmYWFzZiI7CiAgICBjbG9zZVRhZ3MoICRodG1sLCAyMCApOwogICAgPz4K