解析php利用正则表达式解决采集内容排版的问题

 更新时间:2013年06月20日 11:44:04   作者:  
本篇文章是对php利用正则表达式解决采集内容排版问题进行了详细的分析介绍,需要的朋友参考下
做采集经常遇到的问题是内容排版问题,用了一些时间写了个用正则替换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" => '',
   "/&nbsp;/i" => ' ',//空格替换掉
   "/<p.*?>[ |\x{3000}|\r\n]*/ui" => '<p>&nbsp;&nbsp;&nbsp;&nbsp;',//替换半角、全角空格,换行符,用&nbsp;排除写入数据库时产生的编码问题

 );
 $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>&nbsp;&nbsp;&nbsp;&nbsp;'.$content;

 $content = tidy_repair_string($content, $config, 'utf8');//再修复一次,可以去除html空标签
 $content = trim($content);
 return $content;
}

相关文章

  • PHP中其实也可以用方法链

    PHP中其实也可以用方法链

    javascript里有个很有效的用法即方法链,在PHP里也可以使用方法链
    2011-11-11
  • php中stdClass的用法分析

    php中stdClass的用法分析

    这篇文章主要介绍了php中stdClass的用法,实例分析了stdClass的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • php递归列出所有文件和目录的代码

    php递归列出所有文件和目录的代码

    我的程序在国外的SREVER上,自己编的程序存放到哪,我很难记清。 所以编了一个简单的目录递归函数,查看我的程序,很方便的。
    2008-09-09
  • PHP获取文件属性的最简单方法

    PHP获取文件属性的最简单方法

    在本篇文章里小编给大家分享了一篇关于PHP获取文件属性的最简单方法,有需要的朋友们学习下吧。
    2021-08-08
  • PHP 简单日历实现代码

    PHP 简单日历实现代码

    写文件系统的时候看中了个国外的HTML模板...上面有个日历,就想用PHP写出来...
    2009-10-10
  • PHP编程获取音频文件时长的方法【基于getid3类】

    PHP编程获取音频文件时长的方法【基于getid3类】

    这篇文章主要介绍了PHP编程获取音频文件时长的方法,通过引入第三方getid3类来实现操作音频文件的功能,需要的朋友可以参考下
    2017-04-04
  • php的mssql数据库连接类实例

    php的mssql数据库连接类实例

    这篇文章主要介绍了php的mssql数据库连接类,以一个类实例的形式演示了PHP实现针对mssql数据库的各种常用操作方法,包括对数据库的连接与增删改查等操作,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • PHP判断远程图片是否存在的几种方法

    PHP判断远程图片是否存在的几种方法

    这篇文章主要介绍了PHP判断远程图片是否存在的几种方法,需要的朋友可以参考下
    2014-05-05
  • PHP编程函数安全篇

    PHP编程函数安全篇

    关于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL injection,XSS,Path Disclosure,Remote commands execution这样的字眼比比皆是,我们看了之后的用途难道仅仅是抓肉鸡?
    2013-01-01
  • PHP中类属性与类静态变量的访问方法示例

    PHP中类属性与类静态变量的访问方法示例

    这篇文章主要介绍了PHP中类属性与类静态变量的访问方法,结合实例形式对比分析了php中类的属性、静态变量及常量的各种访问技巧,需要的朋友可以参考下
    2016-07-07

最新评论