php html标签闭合,php截取字符串,完美html自动闭合
//截取字符串, html自动闭合
public function str_cut_html($string, $length=450) {
//截取原指定长度
$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;
//解决前面截取出现断开标签的问题,如
$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字符标签数
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字符标签数
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个字符标签数
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();
//存在断开标签
$bbb='';
if(($tags11+$tags22)
$r=strpos($remain_60, '>'); //第一个标签右>的位置
$bbb=mb_substr($remain_60, 0, $r+1, 'UTF-8');
$remain=mb_substr($remain, $r+1);
}
//echo $r;die();
//echo $bbb;die();
//补全断开标签
$substr=$substr.$bbb;
//echo $substr;die();
//匹配截取内容中所有完整标签
preg_match_all('/(<.>)/is',$substr,$_tages);
//print_r($_tages);die();
$tages=(isset($_tages[1]) && $_tages[1]) ? $_tages[1] : array();
//print_r($tages);die();
//自闭合标签集特殊处理
$ignore=array('
','
','
','
', '', '
'', '', '',
'', '', '','','',
);
//开始结束标签集统计
$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();
//需要被闭合的标签位置统计
$where=array();
foreach($be as $k=>$c) {
$k=str_replace('
//echo $k;die();
if(isset($en[$k]) && $c==$en[$k]) continue; //标签闭合无问题
if(isset($en[$k]) && $c
$d=isset($en[$k]) ? $c-$en[$k] : $c; //开始标签比闭合标签多的次数
//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); //每个未闭合标签位置
$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();
//截取后面被闭合标签及前面内容
$need=substr($remain, 0, $last);
//echo $need;die();
$substr.=$need;
return $substr;
}
php html标签闭合,php截取字符串,完美html自动闭合相关推荐
- 用jstl截取字符串
2019独角兽企业重金招聘Python工程师标准>>> 用jstl截取字符串 jstl以前在jsp页面截取字符串时都是用Java表达式,感觉在jsp页面用多了Java表达式不是很好( ...
- smarty模板截取字符串乱码问题完美解决```````
每一次遇到问题,都有解决的方法. 当你解决了问题时,会发现原来自己一直在进步```` 学php不久,却喜欢上了这种语言.太完美了. 今天遇到了一个乱码问题,这类问题对于一个smarty模板忠实者来说, ...
- java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...
一般是用在字符串中有html标签的截取. 如: 后台发布用了在线编辑器, 前台显示内容要截取的情况. import Java.util.ArrayList; import java.util.List ...
- python字符串截取split-python实现字符串完美拆分split()的方法
函数:split() 例子 我们想要将以下字符串rule进行拆分.字符串表示的是一个规则,由"-"得到"-".我们需要将规则中的条件属性与取值分别提取出来,存放 ...
- smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty. function smarty_modifier_trunca ...
- 有条件截取字符串_Python小课堂之木辛老师特别讲解:再次深入浅出字符串的格式化...
我们已经学习了字符串和数字基础的处理方法和逻辑,大家有没有觉得使用起来很方便,编程的过程中也是很给力的呀!其实Python还有更多字符串处理的方法,大家今天就一起来体验一下吧 小朋友们可以先复习一下前 ...
- CString截取字符串全攻略
CString截取字符串全攻略 源地址 http://blog.163.com/seraph_leo/blog/static/1689297102010786206361/?fromdm&fr ...
- 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
首先在jsp页面导入标签 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&qu ...
- thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法
对于ThinkPHP的截取字符串函数无法显示省略号的情况,解决方法如下: 打开Common/extend.php页面,修改msubstr函数如下: function msubstr($str, $st ...
最新文章
- 基于vuejs的移动端分页代码
- ​灾备,让世界早有准备
- 《Java程序设计》实验报告——Java的基本程序设计结构
- c语言程序中的错误可分为,《C语言程序设计(本)》模拟试卷1.doc
- BZOJ 2342: 【SHOI2011】 双倍回文
- 安装MySQL之后,在cmd中MySQL命令不能识别
- R语言观察日志(part22)--glmnet包
- Java并发教程–信号量
- matlab 归一化_MATLAB主成分PCA人脸识别深度解析(一)
- java课程设计学生信息管理_JAVA课程设计---学生基本信息管理系统
- 《一秒学会C++》异步回调函数(C++11)
- 开启密钥轮换(仅适用由密钥管理服务生成的密钥)
- CodeForces-1138A
- java中controller层是干嘛的?
- IT零起点转FICO学习路线(转)
- 共享打印机计算机睡眠时不可用,WIN10从睡眠中唤醒后共享打印机不可用
- 回顾6年深度学习算法实践和演进
- fabric1.4.3单机环境搭建教程(四)
- python 计数器每次加1_python 简单计数器的实现
- 通过LCD1602来了解时序
热门文章
- CRM My Opportunity max hit的技术实现
- Smart Template component rendering process - part 2
- Angular sort recursive的实现原理
- Change Fiori launchpad logo
- Jerry Wang的CRM中间件培训 Middleware
- php不能加载extension的奇怪问题
- 解析word template返回使用的webservice WSDL和Operation
- 让product description 成为mandatory field
- 重用CL_CRM_QUERYAUI_RUN_BTIL实现order search
- javascript file cached in server side