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 相关文章推荐
提问的智慧
Oct 09 PHP
一个程序下载的管理程序(一)
Oct 09 PHP
一个简单的自动发送邮件系统(二)
Oct 09 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
PHP培训要多少钱
Jun 06 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
如何在PHP中读写文件
Sep 07 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
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
对python中执行DOS命令的3种方法总结
2018/05/12 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
资料员的岗位职责
2013/11/20 职场文书
简单的辞职信范文
2014/01/18 职场文书
甜点店创业计划书
2014/01/27 职场文书
读书活动总结
2014/04/28 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
个人总结与自我评价
2014/09/18 职场文书
律师授权委托书范本
2014/10/07 职场文书
单位工作证明
2014/10/07 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python