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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 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
漂亮但不安全的CTB
2006/10/09 PHP
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
php curl的深入解析
2013/06/02 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python re模块介绍
2014/11/30 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
Python循环结构的应用场景详解
2019/07/11 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
药剂专业学生求职信范文
2013/12/28 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书