解析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 相关文章推荐
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP加密解密类实例分析
Apr 20 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php猜单词游戏
2015/09/29 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
通过shell+python实现企业微信预警
2019/03/07 Python
Python实现时间序列可视化的方法
2019/08/06 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
男女朋友协议书
2014/04/23 职场文书
小学中等生评语
2014/12/29 职场文书
超市食品安全承诺书
2015/04/29 职场文书
行政处罚决定书
2015/06/24 职场文书