/**
* 取HTML,并自动补全闭合
* param $html
*/
function subHtml($html){
$segments=preg_split("~(<[^>]+?>)~si",$html,-1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$compressed=array();
$stack=array();
$tag='';
$half_open=array('meta','input','link','img','br');
$cannot_compress=array('pre','code','script','style');
foreach($segmentsas$seg){
if(trim($seg)===''){
continue;
}
if(preg_match("~<([a-z0-9]+)[^>]*?/>~si",$seg)){//<.../>
$compressed[]=$seg;
}elseif(preg_match("~</([a-z0-9]+)[^>]*?>~si",$seg,$match)){//</...>
$tag= format_tag($match[1]);
if(count($stack)>0&&$stack[count($stack)-1]==$tag){
array_pop($stack);
$compressed[]=$seg;
}
}elseif(preg_match("~<([a-z0-9]+)[^>]*?>~si",$seg,$match)){//<...>
$tag= format_tag($match[1]);
//半闭合标签不需要入栈,如<meta>,<input>,<link>,<img>,<br>
if(!in_array($tag,$half_open)){
array_push($stack,$tag);
}
$compressed[]=$seg;
}elseif(preg_match("~<![^>]*>~",$seg)){
//文档声明和注释,注释也不能删除,如<!--ie条件-->
$compressed[]=$seg;
}else{
//去掉空白
$compressed[]=in_array($tag,$cannot_compress) ? $seg:preg_replace('!\s!','',$seg);
}
}
//补全结尾标签
while(!empty($stack)){
$compressed[]='</'.array_pop($stack).'>';
}
returnjoin('',$compressed);
}
function format_tag($tag){
returntrim(strtolower($tag));
}
HTML自动补全闭合
精选 转载文章标签 HTML 自动 补全 闭合 文章分类 前端开发
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
php如何解决html标签没有闭合无反斜杠包裹自动补全亲测有效
【代码】php如何解决html标签没有闭合无反斜杠包裹自动补全亲测有效。
php html 前端 i++ 自定义标签 -
Sublime Text 3 中HTML自动补全
就是Emmet插件和PyV8插件的安装。
Sublime HTML5 Emmet -
自动补全
一、自动补全需求说明 当用户在搜索框输入字符时,就应该提示出与该字符有关的搜索项,如图: 二、安装拼音分词器 要
分词器 analyzer 自动补全