@
hundan @
loading 其实我昨天就把这代码贴在回帖框里准备发一下,但是自己看不懂,只是自己感觉将就能用,也不知道这函数成熟不成熟,所以最终没发。既然大家说了,我就发一下,从 gayhub 扒下来的,大佬们顺便帮看看吧。其实感觉 3 楼 @
Sunyanzi 用 PHP 扩展的方式更好,只是我比较菜,大概率不会弄。
function CloseTags($html)
{
$html = preg_replace('/<[^>]*$/', '', $html);
preg_match_all('#<([a-z1-6]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
$opentags = $result[1];
preg_match_all('#</([a-z1-6]+)>#iU', $html, $result);
$closetags = $result[1];
$len_opened = count($opentags);
if (count($closetags) == $len_opened) {
return $html;
}
$opentags = array_reverse($opentags);
$sc = array('br', 'input', 'img', 'hr', 'meta', 'link');
for ($i = 0; $i < $len_opened; $i++) {
$ot = strtolower($opentags[$i]);
if (!in_array($opentags[$i], $closetags) && !in_array($ot, $sc)) {
$html .= '</' . $opentags[$i] . '>';
} else {
unset($closetags[array_search($opentags[$i], $closetags)]);
}
}
return $html;
}