解析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 相关文章推荐
Apache2 httpd.conf 中文版
Dec 06 PHP
PHP 加密与解密的斗争
Apr 17 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
php实现微信扫码支付
Mar 26 PHP
PHP中localeconv()函数的用法
Mar 26 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错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
教师年终个人自我评价
2013/10/04 职场文书
篝火晚会策划方案
2014/05/16 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
商场广播稿范文
2015/08/19 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS