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
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
php 删除记录实现代码
Mar 12 PHP
php xml文件操作代码(一)
Mar 20 PHP
PHP5 面向对象(学习记录)
Dec 02 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
php实现每日签到功能
Nov 29 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 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基础知识介绍
2013/09/17 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
Python实现身份证号码解析
2015/09/01 Python
python如何通过protobuf实现rpc
2016/03/06 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
python 容器总结整理
2017/04/04 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
python中线程和进程有何区别
2020/06/17 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
前台文员岗位职责及工作流程
2013/11/19 职场文书
总经理司机岗位职责
2014/02/06 职场文书
2014年端午节活动方案
2014/03/11 职场文书
中职招生先进个人材料
2014/08/31 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
朋友离别感言
2015/08/04 职场文书
中考百日冲刺决心书
2015/09/22 职场文书