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数字格式化
Dec 06 PHP
php intval的测试代码发现问题
Jul 27 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
关于php循环跳出的问题
Jul 01 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
浅谈laravel aliases别名的原理
Oct 24 PHP
php去除数组中为0的元素的实例分析
Nov 17 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 fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
jquery 插件学习(二)
2012/08/06 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
详解jQuery选择器
2016/12/21 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
详解js中Array的方法及技巧
2018/09/12 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python查看微信好友是否删除自己
2016/12/19 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
python样条插值的实现代码
2018/12/17 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
师范生实习个人的自我评价
2013/09/28 职场文书
党员公开承诺书
2014/03/25 职场文书
经典演讲稿汇总
2014/05/19 职场文书
自我推荐信怎么写
2015/03/24 职场文书
学会感恩主题班会
2015/08/12 职场文书
mysql中关键词exists的用法实例详解
2022/06/10 MySQL