解析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的5个入手程序
Nov 23 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
ezSQL PHP数据库操作类库
May 16 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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 查找字符串常用函数介绍
2012/06/07 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Element Input组件分析小结
2018/10/11 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python实现大学人员管理系统
2019/10/25 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
Python 高效编程技巧分享
2020/09/10 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
给物业的表扬信
2014/01/21 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
服装设计师求职信
2014/06/04 职场文书
欢度春节标语
2014/07/01 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
自我推荐信怎么写
2015/03/24 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
JavaScript原型链详解
2021/11/07 Javascript