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动态生成VRML网页
Oct 09 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
PHP中16个高危函数整理
Sep 19 PHP
详解PHP中curl_multi并发的实现
Jun 08 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 判断网页是否是utf8编码的方法
2014/06/06 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
php生成二维码
2015/08/10 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
php格式化时间戳
2016/12/17 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
python实现清屏的方法
2015/04/30 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
python分布式环境下的限流器的示例
2017/10/26 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python多线程同步之文件读写控制
2021/02/25 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
财务经理的岗位职责
2013/12/17 职场文书
校本教研工作方案
2014/01/14 职场文书
表决心的诗句大全
2014/03/11 职场文书
房屋租赁意向书
2014/04/01 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
工作证明格式范文
2015/06/15 职场文书
mysql如何查询连续记录
2022/05/11 MySQL