• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

记录一个php的html标签自动闭合的函数代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
<?php
function fix_html_tags($input, $single_tags = array()) {
	$result = null;
	$stack = array();//标签栈
	$_single_tags = array('br', 'hr', 'img', 'input');//合理的单标签

	if ($single_tags && is_array($single_tags)) {
		$_single_tags = array_merge($_single_tags, $single_tags);
		$_single_tags = array_map('strtolower', $_single_tags);
		$_single_tags = array_unique($_single_tags);
	}
	//返回标签分隔之后的内容,包括标签本身
	$content = preg_split('/(<[^>]+>)/si', $input, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

	foreach ($content as $val) {
		//匹配未闭合的自闭合标签 如 <br> <hr> 等
		if (preg_match('/<(\w+)[^\/]*>/si', $val, $m) && in_array(strtolower($m[1]), $_single_tags) ) {
			$result .= "\r\n" . $val;
		}
		//匹配标准书写的自闭合标签,直接返回,不入栈
		else if (preg_match('/<(\w+)[^\/]*\/>/si', $val, $m)) {
			$result .= $val;
		}
		//匹配开始标签,并入栈
		else if (preg_match('/<(\w+)[^\/]*>/si', $val, $m)) {
			$result .= "\r\n" . str_repeat("\t", count($stack)) . $val;
			array_push($stack,  $m[1]);
		}
		//匹配闭合标签,匹配前先判断当前闭合标签是栈顶标签的闭合,优先闭合栈顶标签
		else if (preg_match('/<\/(\w+)[^\/]*>/si', $val, $m)) {
			//出栈,多余的闭合标签直接舍弃
			if (strtolower(end($stack)) == strtolower($m[1])) {
				array_pop($stack);
				$result .= $val;
			}
		} else {
			$result .= $val;
		}
	}

	//倒出所有栈内元素
	while ($stack) {
		$result .= "</".array_pop($stack).">";
		$result .= "\r\n";
	}

	return $result;
}


$str="<div>sdfsdf<span>2<span></span>34534<div>121</span></div>";
echo fix_html_tags($str);
?>

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap