解析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
PHP4中实现动态代理
Oct 09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php实现的递归提成方案实例
Nov 14 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 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实现分页的一个示例
2006/10/09 PHP
PHP计数器的实现代码
2013/06/08 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
php递归函数怎么用才有效
2018/02/24 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python之re操作方法(详解)
2017/06/14 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
python性能测试工具locust的使用
2020/12/28 Python
松材线虫病防治方案
2014/06/15 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
小学安全工作总结2015
2015/05/18 职场文书
狂人日记读书笔记
2015/06/30 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
Python获取字典中某个key的value
2022/04/13 Python