PHP实现补齐关闭的HTML标签


Posted in PHP onMarch 22, 2016

本文实例讲述了PHP实现补齐关闭的HTML标签。分享给大家供大家参考,具体如下:

很多时候,在我们做文章截取摘要的时候,如果出现HTML的内容,会出现截取的文章没有结束的HTML标签。这样的情况下就会出现页面样式错乱的问题。这 个时候我们需要的就是把缺少的结束标签加批量加上。在www.php.net官网看到一个比较好处理的一个函数,展示如下:

function CloseTags($html)
{
  // strip fraction of open or close tag from end (e.g. if we take first x characters, we might cut off a tag at the end!)
  $html = preg_replace('/<[^>]*$/','',$html); // ending with fraction of open tag
  // put open tags into an array
  preg_match_all('#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
  $opentags = $result[1];
  // put all closed tags into an array
  preg_match_all('#</([a-z]+)>#iU', $html, $result);
  $closetags = $result[1];
  $len_opened = count($opentags);
  // if all tags are closed, we can return
  if (count($closetags) == $len_opened) {
   return $html;
  }
  // close tags in reverse order that they were opened
  $opentags = array_reverse($opentags);
  // self closing tags
  $sc = array('br','input','img','hr','meta','link');
  // ,'frame','iframe','param','area','base','basefont','col'
  // should not skip tags that can have content inside!
  for ($i=0; $i < $len_opened; $i++)
  {
   $ot = strtolower($opentags[$i]);
   if (!in_array($opentags[$i], $closetags) && !in_array($ot,$sc))
   {
    $html .= '</'.$opentags[$i].'>';
   }
   else
   {
    unset($closetags[array_search($opentags[$i], $closetags)]);
   }
  }
  return $html;
}

测试使用的结果:

<?php
$content = '<div><p><span>越发忙碌的你,是否想给自己放个假?专注工作的你,是否还记得上一次锻炼是什么时候?优伴户外旅行,给你不一样的旅行体验:给心自由,便处处都是风景!';
echo CloseTags($content);
/*
返回的结果是:
<div><p><span>
越发忙碌的你,是否想给自己放个假?专注工作的你,是否还记得上一次锻炼是什么时候?优伴户外旅行,给你不一样的旅行体验:给心自由,便处处都是风景!</span></p></div>
*/
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP文本数据库的搜索方法
Oct 09 PHP
PHP4实际应用经验篇(3)
Oct 09 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
PHP输出时间差函数代码
Jan 28 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 #PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 #PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 #PHP
Zend Framework分页类用法详解
Mar 22 #PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 #PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 #PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 #PHP
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python基于DES算法加密解密实例
2015/06/03 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python实现直播推流效果
2019/11/26 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
中学生在校期间的自我评价分享
2013/11/13 职场文书
上班迟到检讨书
2014/01/10 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
合伙经营协议书
2014/04/18 职场文书
活动总结的格式
2014/05/07 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
JavaCV实现照片马赛克效果
2022/01/22 Java/Android