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学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
php设计模式小结
Feb 15 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php获取参数的几种方法总结
Feb 18 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
js中日期的加减法
2015/05/06 Javascript
前端微信支付js代码
2016/07/25 Javascript
如何快速上手Vuex
2017/02/14 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
vue中多个倒计时实现代码实例
2019/03/27 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
python解析基于xml格式的日志文件
2017/02/25 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python3实现逐字输出的方法
2019/01/23 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
人事部主管岗位职责
2013/12/26 职场文书
参观接待方案
2014/03/17 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
学校运动会简讯
2015/07/20 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
最新最全的手机号验证正则表达式
2022/02/24 Javascript
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技