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 静态变量与自定义常量的使用方法
Jan 26 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
PHP 验证登陆类分享
Mar 13 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
CI框架附属类用法分析
Dec 26 PHP
PHP实现微信提现功能(微信商城)
Nov 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
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
为数据添加append,remove功能
2006/10/03 Javascript
一些不错的js函数ajax
2008/08/20 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python timeit模块原理及使用方法
2020/10/10 Python
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
上课打牌的检讨书
2014/02/15 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
承诺书格式范文
2014/06/03 职场文书
医院营销工作计划
2015/01/16 职场文书
公证处委托书
2015/01/28 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python