解析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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php 动态多文件上传
Jan 18 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
jQuery+php实现ajax文件即时上传的详解
Jun 17 PHP
最常用的8款PHP调试工具
Jul 06 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
Yii2主题(Theme)用法详解
Jul 23 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
php连接mysql数据库
Mar 21 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php输出xml属性的方法
2015/03/19 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
vue实现扫码功能
2020/01/17 Javascript
win与linux系统中python requests 安装
2016/12/04 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python脚本开机自启的实现方法
2019/06/28 Python
python多线程并发及测试框架案例
2019/10/15 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
django中的数据库迁移的实现
2020/03/16 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
python实现定时发送邮件
2020/12/23 Python
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
应届毕业生自荐信例文
2014/02/26 职场文书
留学经费担保书
2014/05/12 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
实习工作表现评语
2014/12/31 职场文书
原告离婚代理词
2015/05/23 职场文书
热血教师观后感
2015/06/10 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
公证书
2019/04/17 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android