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实现时间轴函数代码
Oct 08 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
php引用返回与取消引用的详解
Jun 08 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
PHP中isset与array_key_exists的区别实例分析
Jun 02 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 PHP
php适配器模式简单应用示例
Oct 23 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
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
mysql时区问题
2008/03/26 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
经验几则 推荐
2006/09/05 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
node后端服务保活的实现
2019/11/10 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python实现基本线性数据结构
2016/08/22 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
python实现mean-shift聚类算法
2020/06/10 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
销售经理竞聘书
2014/03/31 职场文书
驻村工作先进事迹
2014/08/14 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
幸福来敲门观后感
2015/06/04 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
vue+echarts实现多条折线图
2022/03/21 Vue.js