解析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 6.0+ 批量注册用户名
Sep 13 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP防范SQL注入的具体方法详解(测试通过)
May 09 PHP
PHP中读取照片exif信息的方法
Aug 20 PHP
php实现的常见排序算法汇总
Sep 08 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
搜索附近的人PHP实现代码
Feb 11 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
咖啡的传说和历史
2021/03/03 新手入门
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
python输入错误后删除的方法
2019/10/12 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
python的列表List求均值和中位数实例
2020/03/03 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
python爬取天气数据的实例详解
2020/11/20 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
办公室文秘自我评价
2013/09/21 职场文书
初中美术教学反思
2014/01/29 职场文书
2014离婚协议书范文
2014/09/10 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
学校施工安全责任书
2015/01/29 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python