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 Document 代码注释规范
Apr 13 PHP
20个PHP常用类库小结
Sep 11 PHP
php curl模拟post请求小实例
Nov 13 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php cli模式下获取参数的方法
May 05 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
PHP实现与java 通信的插件使用教程
Aug 11 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/02/28 无线电
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
python实现下载文件的三种方法
2017/02/09 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
小学生自我鉴定
2013/10/12 职场文书
社团成立邀请函
2014/01/08 职场文书
雷人标语集锦
2014/06/19 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技