解析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 相关文章推荐
使用eAccelerator加密PHP程序
Oct 03 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php curl 伪造IP来源的实例代码
Nov 01 PHP
PHP输出时间差函数代码
Jan 28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php常用hash加密函数
Nov 22 PHP
windows下apache搭建php开发环境
Aug 27 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Django ORM filter() 的运用详解
2020/05/14 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
django中cookiecutter的使用教程
2020/12/03 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
广州盈通面试题
2015/12/05 面试题
个人廉洁自律总结
2015/03/06 职场文书
东京审判观后感
2015/06/01 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL