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和ACCESS写聊天室(二)
Oct 09 PHP
PHP array 的加法操作代码
Jul 24 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
如何用PHP做到页面注册审核
Mar 02 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模板,主要想体现一下思路
2006/12/25 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
python ansible服务及剧本编写
2017/12/29 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python随机生成库faker库api实例详解
2019/11/28 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
团日活动总结书
2014/05/08 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
婚前协议书范本两则
2014/10/16 职场文书
校友回访母校寄语
2015/02/26 职场文书
redis数据结构之压缩列表
2022/03/21 Redis