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中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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 中的批处理的实现
2007/06/14 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
基于initPHP的框架介绍
2013/04/18 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
Python的面向对象思想分析
2015/01/14 Python
使用python实现tcp自动重连
2017/07/02 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
电子狗项圈:eDog Australia
2019/12/04 全球购物
大四学年自我鉴定
2013/11/13 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
募捐倡议书
2014/04/14 职场文书
员工升职自荐信
2015/03/27 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
环保建议书作文400字
2015/09/14 职场文书