• 技术文章 >php教程 >php手册

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

    2016-06-13 11:47:01原创460

    做采集经常遇到的问题是内容排版问题,用了一些时间写了个用正则替换html标签和样式的函数,共享下。

    复制代码 代码如下:


    /**
    * 格式化内容
    * @param string $content 内容最好统一用utf-8编码
    * @return string
    * !本函数需要开启tidy扩展
    */
    function removeFormat($content) {
    $replaces = array (
    "//i" => '',
    "/<\/font>/i" => '',
    "//i" => '',
    "/<\/strong>/i" => '',
    "//i" => '',
    "/<\/span>/i" => '',
    "//i" => "

    ",
    "/<\/div>/i" => "

    ",
    "//i"=>'',
    /* "//i" => '',//遇到有表格的内容就不要启用
    "/<\/table>/i" => '',
    "//i" => '',
    "/<\/tbody>/i" => '',
    "//i" => '

    ',
    "/<\/tr>/i" => '

    ',
    "//i" => '', */
    "/style=.+?['|\"]/i" => '',
    "/class=.+?['|\"]/i" => '',
    "/id=.+?['|\"]/i"=>'',
    "/lang=.+?['|\"]/i"=>'',
    //"/width=.+?['|\"]/i"=>'',//不好控制注释掉
    //"/height=.+?['|\"]/i"=>'',
    "/border=.+?['|\"]/i"=>'',
    "/face=.+?['|\"]/i"=>'',
    "/[ ]*/i" => "

    ",
    "/.*<\/iframe>/i" => '',
    "/ /i" => ' ',//空格替换掉
    "/[ |\x{3000}|\r\n]*/ui" => '

    ',//替换半角、全角空格,换行符,用 排除写入数据库时产生的编码问题

    );
    $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,'

    ')>6)//部分内容开头可能缺失

    标签
    $content = '

    '.$content;

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


    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    相关文章推荐

    • 我自己借用精华区里的MIME类写了一个基本的发信小东东(2)• 用php守护另一个php进程的例子• php计算多维数组中所有值总和的方法,多维数组• php将csv文件导入到mysql数据库的方法,• php提取csv格式文件中的字符串出现的问题及解决办法
    1/1

    PHP中文网