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购物网站支付paypal使用方法
Nov 28 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
使用php清除bom示例
Mar 03 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
Oct 14 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
phalcon框架使用指南
Feb 23 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
PHP CURL中传递cookie的方法步骤
May 09 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 PHP
Yii框架核心组件类实例详解
Aug 06 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
php MySQL与分页效率
2008/06/04 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
js实现登录验证码
2016/12/22 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
机械机修工岗位职责
2014/08/03 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL