• 技术文章 >后端开发 >php教程

    php正则替换处理HTML页面的方法,php替换html页面_PHP教程

    2016-07-13 09:49:53原创429

    php正则替换处理HTML页面的方法,php替换html页面


    本文实例讲述了php正则替换处理HTML页面的方法。分享给大家供大家参考。具体如下:

    <?php
    if(!defined('BASEPATH')) exit('No direct script access allowed');
     /**
      * HTML替换处理类,考虑如下几种替换
      * 1. img src : '/]+?)/i'
      * 2. a href : '/]+?)/i'
      * 3. ifram.src : '/]+?)/i'
      * 4. frame src : '/]+?)/i'
      * 5. js  : '/window.open([( ]+?)([\'" ]+?)(.+?)([ )+?])/i'
      * 6. css  : '/background(.+?)url([( ])([\'" ]+?)(.+?)([ )+?])/i'
      */
     class Myreplace {
      private $moudle_array = array('udata','tdata','tresult','dresult');
      private $content;
      private $relative_dirname;
      private $projectid;
      private $moudle;
      function __construct() {
       $this->CI = &get_instance ();
      }
      /**
       * 替换
       * @param string $content HTML内容
       * @param string $relative 相对路径
       * @param int  $projectid 项目id
       * @moudle string $moudle  模板标识: udata,tdata,tresult,dresult
       */
      public function my_replace($content,$relative,$projectid,$moudle) {
       $this->content = $content;
       $this->relative_dirname = $relative;
       $this->projectid = $projectid;
       if(in_array(strtolower($moudle),$this->moudle_array))
        $this->moudle = $moudle;
       else exit;
       switch($this->moudle) {
        case 'udata':
         $this->CI->load->model('mupload_data','model');
         break;
        case 'tdata':
         $this->CI->load->model('taskdata','model');
         break;
        case 'tresult':
         $this->CI->load->model('taskresult','model');
         break;
        case 'dresult':
         $this->CI->load->model('dmsresult','model');
         break;
        default:
         break;
       }
       $pattern = '/]+?)/i';
       $content = preg_replace_callback( $pattern, array($this, 'image_replace') , $content );
       $pattern = '/]+?)/i';
       $content = preg_replace_callback( $pattern, array($this, 'html_replace') , $content );
       $pattern = '/]+?)/i';
       $content = preg_replace_callback( $pattern, array($this, 'iframe_replace') , $content );
       $pattern = '/]+?)/i'; 
       $content = preg_replace_callback( $pattern, array($this, 'frame_replace'), $content );
       $pattern = '/window.open([( ]+?)([\'" ]+?)(.+?)([ )]+?)/i';
       $content = preg_replace_callback( $pattern, array($this, 'js_replace'), $content );
       $pattern = '/background(.+?)url([( ])([\'" ]+?)(.+?)([ )+?])/i';
       $content = preg_replace_callback( $pattern, array($this, 'css_replace'), $content);
       return $content;
      }
      private function image_replace($matches) {
       if(count($matches) < 4) return '';
       if( empty($matches[3]) ) return '';
       $matches[3] = rtrim($matches[3],'\'"/');
       //获取图片的id
       $parent_dir_num = substr_count( $matches[3], '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($matches[3],'./');
       $image_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($image_id) ) {
        if($this->moudle == 'dresult') {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/readpic/$image_id?pid=".$this->projectid .$matches[2]. $matches[4];
        } else {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/picfile/$image_id?pid=".$this->projectid .$matches[2]. $matches[4];
        }
       } else {
        return "0) 
        $matches[3] = substr($matches[3],0,strrpos($matches[3],'#'));
       //获取html的id
       $parent_dir_num = substr_count( $matches[3], '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($matches[3],'./');
       $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($txtfile_id ) ) {
        if($this->moudle == 'dresult') {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
        } else {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
        }
       } else {
        return "0) 
        $matches[3] = substr($matches[3],0,strrpos($matches[3],'#'));
       //获取html的id
       $parent_dir_num = substr_count( $matches[3], '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($matches[3],'./');
       $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($txtfile_id ) ) {
        if($this->moudle == 'dresult') {  
         return "CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
        } else {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
        }
       } else {
        return "0) 
        $matches[3] = substr($matches[3],0,strrpos($matches[3],'#'));
       //获取html的id
       $parent_dir_num = substr_count( $matches[3], '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($matches[3],'./');
       $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($txtfile_id ) ) {
        if($this->moudle == 'dresult') { 
         return "CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
        } else {
         return "CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
        }
       } else {
        return "0) 
        return "window.open".$matches[1].$matches[2].$matches[3].$matches[4];;
       //获取html的id
       $parent_dir_num = substr_count( $href, '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($href,'./');
       $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($txtfile_id ) ) {
        if($this->moudle == 'dresult') { 
         return "window.open".$matches[1].$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid.$matches[2].','.$other.$matches[4];
        } else {
         return "window.open".$matches[1].$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid.$matches[2].','.$other.$matches[4];
        }
       } else {
        return "window.open".$matches[1].$matches[2].$matches[3].$matches[4];
       }
      }
      private function css_replace( $matches ) {
       if(count($matches) < 5) return '';
       if( empty($matches[4]) ) return '';
        
       $matches[4] = rtrim($matches[4],'\'"/');
       //获取图片的id
       $parent_dir_num = substr_count( $matches[4], '../');
       $relative_dirname = $this->relative_dirname;
       for($i=0; $i<$parent_dir_num; $i++) {
        $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"//m.sbmmt.com/m/") );
       }
       $relativepath = rtrim($relative_dirname,'//m.sbmmt.com/m/') . '//m.sbmmt.com/m/'.ltrim($matches[4],'./');
       $image_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
       //输出
       if( !empty($image_id) ) {
        if($this->moudle == 'dresult') {
         return "background".$matches[1]."url".$matches[2].$matches[3].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readpic/$image_id?pid=".$this->projectid .$matches[3]. $matches[5];
        } else {
         return "background".$matches[1]."url".$matches[2].$matches[3].$this->CI->config->item("base_url")."cdms/".$this->moudle."/picfile/$image_id?pid=".$this->projectid .$matches[3]. $matches[5];
        }
       } else {
        return "background".$matches[1]."url".$matches[2].$matches[3].$matches[4].$matches[3].$matches[5];
       }
      }
     }
    /* End of Myreplace.php */
    /* Location: /application/libraries/Myreplace.php */
    
    

    希望本文所述对大家的php程序设计有所帮助。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1018522.htmlTechArticlephp正则替换处理HTML页面的方法,php替换html页面 本文实例讲述了php正则替换处理HTML页面的方法。分享给大家供大家参考。具体如下: phpi...

    php入门到就业线上直播课:查看学习

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

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:php 正则 HTML 字符串
    上一篇:PHP排序算法类实例,排序算法实例_PHP教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 你知道如何用PHP实现多进程吗• php里 的 四舍五入_PHP教程• PHP中全面阻止SQL注入式攻击分析小结_PHP教程• 第八节 访问方式 [8]_PHP教程• 使用阿里云低成本打造站内搜索引擎
    1/1

    PHP中文网