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 相关文章推荐
收集的DedeCMS一些使用经验
Mar 17 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
php中的一些数组排序方法分享
Jul 20 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
php实现单链表的实例代码
Mar 22 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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分页函数
2006/10/09 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
总结一些js自定义的函数
2006/08/05 Javascript
不错的asp中显示新闻的功能
2006/10/13 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
TypeScript之调用栈的实现
2019/12/31 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
tornado 多进程模式解析
2018/01/15 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
python3处理word文档实例分析
2020/12/01 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
银行实习自我鉴定
2013/10/12 职场文书
采购部岗位职责
2013/11/24 职场文书
马智宇结婚主持词
2014/04/01 职场文书
同意迁入证明模板
2014/10/26 职场文书
维稳工作情况汇报
2014/10/27 职场文书
幼儿园感谢信
2015/01/21 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
生日宴会祝酒词
2015/08/10 职场文书