php html标签闭合,php截取字符串,完美html自动闭合
//截取字符串, html自動(dòng)閉合
public function str_cut_html($string, $length=450) {
//截取原指定長(zhǎng)度
$substr=mb_substr($string, 0, $length, 'UTF-8');
//echo $string;die();
//剩余部分
$remain=mb_substr($string, $length,mb_strlen($string, 'UTF-8'),'UTF-8');
//echo $remain;die();
//剩余小于150 直接使用原string
if(strlen($remain)<150) return $string;
//解決前面截取出現(xiàn)斷開標(biāo)簽的問題,如
被截成$substr_60=mb_substr($substr, -60, 60, 'UTF-8'); //被截取的字符串后60字符
//echo $substr_60;die();
$remain_60=mb_substr($remain, 0, 60, 'UTF-8'); //剩余前60字符
//echo $remain_60;die();
//剩余前60字符標(biāo)簽數(shù)
preg_match_all('/(<.>)/is',$remain_60,$_tags11);
//print_r($_tages);die();
$tags11=(isset($_tags11[1]) && $_tags11[1]) ? $_tags11[1] : array();
$tags11=count($tags11);
//print_r($tags11);die();
//被截取的字符串后60字符標(biāo)簽數(shù)
preg_match_all('/(<.>)/is',$substr_60,$_tags22);
//print_r($_tages);die();
$tags22=(isset($_tags22[1]) && $_tags22[1]) ? $_tags22[1] : array();
$tags22=count($tags22);
//print_r($tags22);die();
//前后120個(gè)字符標(biāo)簽數(shù)
preg_match_all('/(<.>)/is',$substr_60.$remain_60,$_tags33);
//print_r($_tages);die();
$tags33=(isset($_tags33[1]) && $_tags33[1]) ? $_tags33[1] : array();
$tags33=count($tags33);
//print_r($tags33);die();
//存在斷開標(biāo)簽
$bbb='';
if(($tags11+$tags22)
$r=strpos($remain_60, '>'); //第一個(gè)標(biāo)簽右>的位置
$bbb=mb_substr($remain_60, 0, $r+1, 'UTF-8');
$remain=mb_substr($remain, $r+1);
}
//echo $r;die();
//echo $bbb;die();
//補(bǔ)全斷開標(biāo)簽
$substr=$substr.$bbb;
//echo $substr;die();
//匹配截取內(nèi)容中所有完整標(biāo)簽
preg_match_all('/(<.>)/is',$substr,$_tages);
//print_r($_tages);die();
$tages=(isset($_tages[1]) && $_tages[1]) ? $_tages[1] : array();
//print_r($tages);die();
//自閉合標(biāo)簽集特殊處理
??????? $ignore=array('
','
','
','
', '', '
'', '', '',
'', '', '','','',
);
//開始結(jié)束標(biāo)簽集統(tǒng)計(jì)
$be=$en=array();
//$_tmp=array();
foreach($tages as $v) {
$v=str_replace(array('?? ','? '), array(' ',' ') ,strtolower($v));
??????????? //將
if(strpos($v, "'") || strpos($v, '"')) {
$v=substr($v, 0 , strpos($v, ' ')).'>';
}
if(in_array($v, $ignore)) continue;
if(strpos('@@@'.$v, '/')) {
if(isset($en[$v])) {
$en[$v]++;
} else {
$en[$v]=1;
}
} else {
if(isset($be[$v])) {
$be[$v]++;
} else {
$be[$v]=1;
}
}
//$_tmp[]=$v;
}
//print_r($be);print_r($en);die();
//需要被閉合的標(biāo)簽位置統(tǒng)計(jì)
$where=array();
foreach($be as $k=>$c) {
$k=str_replace('
//echo $k;die();
if(isset($en[$k]) && $c==$en[$k]) continue; //標(biāo)簽閉合無問題
if(isset($en[$k]) && $c
$d=isset($en[$k]) ? $c-$en[$k] : $c; //開始標(biāo)簽比閉合標(biāo)簽多的次數(shù)
//echo $k.$d;die();
$need[$k]=$d;
$start=0;
for($i=1; $i<=$d; $i++) {
$aa=strpos($remain, $k, $start>0?($start+strlen($k)):$start); //每個(gè)未閉合標(biāo)簽位置
$start=$aa>0?$aa:0;
$where[$k]=$start+strlen($k);
}
}
//print_r($where);die();
sort($where);
//print_r($where);die();
$last=array_pop($where);
//echo $last;die();
//截取后面被閉合標(biāo)簽及前面內(nèi)容
$need=substr($remain, 0, $last);
//echo $need;die();
$substr.=$need;
return $substr;
}
總結(jié)
以上是生活随笔為你收集整理的php html标签闭合,php截取字符串,完美html自动闭合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php通过ajax下载文件,PHP使用a
- 下一篇: oppo手机视频通话特效在哪里(OPPO