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获取mysql版本的几种方法小结
Mar 25 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
php报错502badgateway解决方法
Oct 11 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
tp5.1框架数据库子查询操作实例分析
May 26 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
使用URL传输SESSION信息
2015/07/14 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
Python3中的2to3转换工具使用示例
2015/06/12 Python
python daemon守护进程实现
2016/08/27 Python
python调用摄像头显示图像的实例
2018/08/03 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
python3实现弹弹球小游戏
2019/11/25 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
判断单链表中是否存在环
2012/07/16 面试题
酒吧创业计划书
2014/01/18 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
趣味比赛活动方案
2014/02/15 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang