解析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图片验证码代码
Mar 27 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
php数字游戏 计算24算法
Jun 10 PHP
PHP判断是否有Get参数的方法
May 05 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
WordPress自定义时间显示格式
Mar 27 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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的FTP学习(二)
2006/10/09 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
js 操作符汇总
2014/11/08 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
openCV提取图像中的矩形区域
2020/07/21 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
求职推荐信
2013/10/28 职场文书
企业安全生产标语
2014/06/06 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
MySQL的索引你了解吗
2022/03/13 MySQL