解析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 5.0对象模型深度探索之绑定
Sep 05 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php输入流php://input使用浅析
Sep 02 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
PHP内存使用情况如何获取
Oct 10 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
nginx下安装php7+php5
Jul 31 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
Jun 17 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php 邮件发送问题解决
2014/03/22 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
PHP 断点续传实例详解
2017/11/11 PHP
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
微信小程序多音频播放进度条问题
2018/08/28 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
Mac 上切换Python多版本
2017/06/17 Python
简单了解Python中的几种函数
2017/11/03 Python
浅谈Django的缓存机制
2018/08/23 Python
Python函数装饰器实现方法详解
2018/12/22 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
pytorch的batch normalize使用详解
2020/01/15 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
中学生国旗下讲话稿
2014/04/26 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
金融专业求职信
2014/08/05 职场文书
2014年公务员工作总结
2014/11/18 职场文书
求职自荐信怎么写
2015/03/04 职场文书
2015年数学教师工作总结
2015/05/20 职场文书