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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
php注销代码(session注销)
May 31 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
PHP插入排序实现代码
Apr 04 PHP
php实现的常见排序算法汇总
Sep 08 PHP
php广告加载类用法实例
Sep 23 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
laravel返回统一格式错误码问题
Nov 04 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网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
wxpython学习笔记(推荐查看)
2014/06/09 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
详解Python验证码识别
2016/01/25 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Python实现井字棋小游戏
2020/03/09 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
详解python中的lambda与sorted函数
2020/09/04 Python
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
银行领导证婚词
2014/01/11 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
加油口号大全
2014/06/13 职场文书
研讨会致辞
2015/07/31 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技