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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP速成大法
Jan 30 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 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生成静态html文件的三种方法
2013/06/18 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
javascript每日必学之封装
2016/02/23 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python星号*与**用法分析
2018/02/02 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python中使用print输出中文的方法
2018/07/16 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
毕业实习评语
2014/02/10 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
八一建军节演讲稿
2014/09/10 职场文书
法学专业求职信范文
2015/03/19 职场文书