PHP实现网页内容html标签补全和过滤的方法小结【2种方法】


Posted in PHP onApril 27, 2017

本文实例讲述了PHP实现网页内容html标签补全和过滤的方法。分享给大家供大家参考,具体如下:

如果你的网页内容的html标签显示不全,有些表格标签不完整而导致页面混乱,或者把你的内容之外的局部html页面给包含进去了,我们可以写个函数方法来补全html标签以及过滤掉无用的html标签.

php使HTML标签自动补全,闭合,过滤函数方法一:

代码:

function closetags($html) {
 preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
 $openedtags = $result[1];
 preg_match_all('#</([a-z]+)>#iU', $html, $result);
 $closedtags = $result[1];
 $len_opened = count($openedtags);
 if (count($closedtags) == $len_opened) {
    return $html;
 }
 $openedtags = array_reverse($openedtags);
 for ($i=0; $i < $len_opened; $i++) {
    if (!in_array($openedtags[$i], $closedtags)) {
     $html .= '</'.$openedtags[$i].'>';
    }else {
     unset($closedtags[array_search($openedtags[$i], $closedtags)]);
    }
 }
 return $html;
}

closetags()解析:

array_reverse() : 此函数将原数组中的元素顺序翻转,创建新的数组并返回。如果第二个参数指定为 true,则元素的键名保持不变,否则键名将丢失。

array_search() : array_search(value,array,strict),此函数与in_array()一样在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。 如果第三个参数strict被指定为 true,则只有在数据类型和值都一致时才返回相应元素的键名。

php使HTML标签自动补全,闭合,过滤函数方法二:

function checkhtml($html) {
  $html = stripslashes($html);
    preg_match_all("/\<([^\<]+)\>/is", $html, $ms);
    $searchs[] = '<';
    $replaces[] = '<';
    $searchs[] = '>';
    $replaces[] = '>';
    if($ms[1]) {
      $allowtags = 'img|font|div|table|tbody|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li';//允许的标签
      $ms[1] = array_unique($ms[1]);
      foreach ($ms[1] as $value) {
        $searchs[] = "<".$value.">";
        $value = shtmlspecialchars($value);
        $value = str_replace(array('\\','/*'), array('.','/.'), $value);
        $value = preg_replace(array("/(javascript|script|eval|behaviour|expression)/i", "/(\s+|"|')on/i"), array('.', ' .'), $value);
        if(!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is", $value)) {
          $value = '';
        }
        $replaces[] = empty($value)?'':"<".str_replace('"', '"', $value).">";
      }
    }
    $html = str_replace($searchs, $replaces, $html);
  return $html;
}
//取消HTML代码
function shtmlspecialchars($string) {
  if(is_array($string)) {
    foreach($string as $key => $val) {
      $string[$key] = shtmlspecialchars($val);
    }
  } else {
    $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
      str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
  }
  return $string;
}

checkhtml($html)解析:

stripslashes():函数删除由addslashes()函数添加的反斜杠。该函数用于清理从数据库或HTML表单中取回的数据。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP语法速查表
Jan 02 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php中的常用魔术方法汇总
Feb 14 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
10个值得深思的PHP面试题
Nov 14 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 #PHP
php上传excel表格并获取数据
Apr 27 #PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 #PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 #PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 #PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 #PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 #PHP
You might like
全国中波电台频率表
2020/03/11 无线电
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
利用PHP实现短域名互转
2013/07/05 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
深入理解Angular4中的依赖注入
2017/06/07 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python如何实现线程间通信
2020/07/30 Python
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
妈妈的账单教学反思
2014/02/06 职场文书
班级联欢会主持词
2015/07/03 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL