//截取字符串, 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自动闭合相关推荐

  1. 用jstl截取字符串

    2019独角兽企业重金招聘Python工程师标准>>> 用jstl截取字符串 jstl以前在jsp页面截取字符串时都是用Java表达式,感觉在jsp页面用多了Java表达式不是很好( ...

  2. smarty模板截取字符串乱码问题完美解决```````

    每一次遇到问题,都有解决的方法. 当你解决了问题时,会发现原来自己一直在进步```` 学php不久,却喜欢上了这种语言.太完美了. 今天遇到了一个乱码问题,这类问题对于一个smarty模板忠实者来说, ...

  3. java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...

    一般是用在字符串中有html标签的截取. 如: 后台发布用了在线编辑器, 前台显示内容要截取的情况. import Java.util.ArrayList; import java.util.List ...

  4. python字符串截取split-python实现字符串完美拆分split()的方法

    函数:split() 例子 我们想要将以下字符串rule进行拆分.字符串表示的是一个规则,由"-"得到"-".我们需要将规则中的条件属性与取值分别提取出来,存放 ...

  5. smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...

    smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty. function smarty_modifier_trunca ...

  6. 有条件截取字符串_Python小课堂之木辛老师特别讲解:再次深入浅出字符串的格式化...

    我们已经学习了字符串和数字基础的处理方法和逻辑,大家有没有觉得使用起来很方便,编程的过程中也是很给力的呀!其实Python还有更多字符串处理的方法,大家今天就一起来体验一下吧 小朋友们可以先复习一下前 ...

  7. CString截取字符串全攻略

    CString截取字符串全攻略 源地址 http://blog.163.com/seraph_leo/blog/static/1689297102010786206361/?fromdm&fr ...

  8. 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法

    首先在jsp页面导入标签 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&qu ...

  9. thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法

    对于ThinkPHP的截取字符串函数无法显示省略号的情况,解决方法如下: 打开Common/extend.php页面,修改msubstr函数如下: function msubstr($str, $st ...

最新文章

  1. 基于vuejs的移动端分页代码
  2. ​灾备,让世界早有准备
  3. 《Java程序设计》实验报告——Java的基本程序设计结构
  4. c语言程序中的错误可分为,《C语言程序设计(本)》模拟试卷1.doc
  5. BZOJ 2342: 【SHOI2011】 双倍回文
  6. 安装MySQL之后,在cmd中MySQL命令不能识别
  7. R语言观察日志(part22)--glmnet包
  8. Java并发教程–信号量
  9. matlab 归一化_MATLAB主成分PCA人脸识别深度解析(一)
  10. java课程设计学生信息管理_JAVA课程设计---学生基本信息管理系统
  11. 《一秒学会C++》异步回调函数(C++11)
  12. 开启密钥轮换(仅适用由密钥管理服务生成的密钥)
  13. CodeForces-1138A
  14. java中controller层是干嘛的?
  15. IT零起点转FICO学习路线(转)
  16. 共享打印机计算机睡眠时不可用,WIN10从睡眠中唤醒后共享打印机不可用
  17. 回顾6年深度学习算法实践和演进
  18. fabric1.4.3单机环境搭建教程(四)
  19. python 计数器每次加1_python 简单计数器的实现
  20. 通过LCD1602来了解时序

热门文章

  1. CRM My Opportunity max hit的技术实现
  2. Smart Template component rendering process - part 2
  3. Angular sort recursive的实现原理
  4. Change Fiori launchpad logo
  5. Jerry Wang的CRM中间件培训 Middleware
  6. php不能加载extension的奇怪问题
  7. 解析word template返回使用的webservice WSDL和Operation
  8. 让product description 成为mandatory field
  9. 重用CL_CRM_QUERYAUI_RUN_BTIL实现order search
  10. javascript file cached in server side