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
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
获取URL文件名后缀
Oct 24 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
tp5.1 实现setInc字段自动加1
Oct 18 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
javascript 日期常用的方法
2009/11/11 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
python实现的防DDoS脚本
2011/02/08 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
Delphi笔试题
2016/11/14 面试题
旅游项目开发策划书
2014/01/18 职场文书
领导接待方案
2014/03/13 职场文书
检讨书格式
2015/05/07 职场文书