解析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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php微信开发之图片回复功能
Jun 14 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截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
微信网页登录逻辑与实现方法
2019/04/29 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
学习python类方法与对象方法
2016/03/15 Python
Python实现Linux中的du命令
2017/06/12 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python列表解析配合if else的方法
2018/06/23 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
心理健康教育心得体会
2013/12/29 职场文书
领导班子对照检查材料
2014/09/22 职场文书
欠款证明
2015/06/24 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电