解析php利用正则表达式解决采集内容排版的问题


Posted in PHP onJune 20, 2013

做采集经常遇到的问题是内容排版问题,用了一些时间写了个用正则替换html标签和样式的函数,共享下。

/**
 * 格式化内容
 * @param string $content 内容最好统一用utf-8编码
 * @return string
 * !本函数需要开启tidy扩展
 */
function removeFormat($content) {
 $replaces = array (
   "/<font.*?>/i" => '',
   "/<\/font>/i" => '',
   "/<strong>/i" => '',
   "/<\/strong>/i" => '',
   "/<span.*?>/i" => '',
   "/<\/span>/i" => '',
   "/<div.*?>/i" => "<p>",
   "/<\/div>/i" => "</p>",
   "/<!--<.*?>*-->/i"=>'',
   /* "/<table.*?>/i" => '',//遇到有表格的内容就不要启用
   "/<\/table>/i" => '',
   "/<tbody.*?>/i" => '',
   "/<\/tbody>/i" => '',
   "/<tr.*?>/i" => '<p>',
   "/<\/tr>/i" => '</p>',
   "/<td.*?>/i" => '', */
   "/style=.+?['|\"]/i" => '',
   "/class=.+?['|\"]/i" => '',
   "/id=.+?['|\"]/i"=>'',
   "/lang=.+?['|\"]/i"=>'',
   //"/width=.+?['|\"]/i"=>'',//不好控制注释掉
   //"/height=.+?['|\"]/i"=>'',
   "/border=.+?['|\"]/i"=>'',
   "/face=.+?['|\"]/i"=>'',
   "/<br.*?>[ ]*/i" => "</p><p>",
   "/<iframe.*?>.*<\/iframe>/i" => '',
   "/ /i" => ' ',//空格替换掉
   "/<p.*?>[ |\x{3000}|\r\n]*/ui" => '<p>    ',//替换半角、全角空格,换行符,用 排除写入数据库时产生的编码问题 );
 $config = array(
         //'indent' => TRUE, //是否缩进  
                'output-html' => TRUE,//是否是输出xhtml  
                'show-body-only'=>TRUE,//是否只获得到body  
               'wrap' => 0
    );
 $content = tidy_repair_string($content, $config, 'utf8');//先利用php自带的tidy类库修复html标签,不然替换的时候容易出现各种诡异的情况
 $content = trim($content);
 foreach ( $replaces as $k => $v ) {
  $content = preg_replace ( $k, $v, $content );
 }
 if(strpos($content,'<p>')>6)//部分内容开头可能缺失<p>标签
  $content = '<p>    '.$content;
 $content = tidy_repair_string($content, $config, 'utf8');//再修复一次,可以去除html空标签
 $content = trim($content);
 return $content;
}

PHP 相关文章推荐
PHP 简单数组排序实现代码
Aug 05 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php中url函数介绍及使用示例
Feb 13 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
php把数组值转换成键的方法
Jul 13 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
Laravel框架源码解析之入口文件原理分析
May 14 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 #PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 #PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 #PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
Jun 20 #PHP
解析yii数据库的增删查改
Jun 20 #PHP
在yii中新增一个用户验证的方法详解
Jun 20 #PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 #PHP
You might like
php mssql 数据库分页SQL语句
2008/12/16 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
Javascript 入门基础学习
2010/03/10 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python实现画出e指数函数的图像
2019/11/21 Python
django admin 添加自定义链接方式
2020/03/11 Python
python中什么是面向对象
2020/06/11 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
Django数据统计功能count()的使用
2020/11/30 Python
ORACLE十问
2015/04/20 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
化学专业毕业生自荐信
2013/11/15 职场文书
党员承诺书怎么写
2014/05/20 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书