解析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分页显示制作详细讲解
Oct 09 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
解析php中die(),exit(),return的区别
Jun 20 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 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中遍历stdclass object的实现代码
2011/06/09 PHP
浅析php工厂模式
2014/11/25 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
splice slice区别
2006/10/09 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
python感知机实现代码
2019/01/18 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
大学军训感言800字
2014/02/27 职场文书
铁路安全事故反思
2014/04/26 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
市场营销策划方案
2014/06/11 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
南京大屠杀观后感
2015/06/02 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python