程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php正則替換處理HTML頁面的方法,php替換html頁面

php正則替換處理HTML頁面的方法,php替換html頁面

編輯:關於PHP編程

php正則替換處理HTML頁面的方法,php替換html頁面


本文實例講述了php正則替換處理HTML頁面的方法。分享給大家供大家參考。具體如下:

<?php
if(!defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * HTML替換處理類,考慮如下幾種替換
  * 1. img src : '/<img(.+?)src=([\'\" ])?(.+?)([ >]+?)/i'
  * 2. a href : '/<a(.+?)href=([\'\" ])?(.+?)([ >]+?)/i'
  * 3. ifram.src : '/<iframe(.+?)src=([\'\" ])?(.+?)([ >]+?)/i'
  * 4. frame src : '/<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 = '/<img(.+?)src=([\'\" ])?(.+?)([ >]+?)/i';
   $content = preg_replace_callback( $pattern, array($this, 'image_replace') , $content );
   $pattern = '/<a(.+?)href=([\'\" ])?(.+?)([ >]+?)/i';
   $content = preg_replace_callback( $pattern, array($this, 'html_replace') , $content );
   $pattern = '/<iframe(.+?)src=([\'\" ])?(.+?)([ >]+?)/i';
   $content = preg_replace_callback( $pattern, array($this, 'iframe_replace') , $content );
   $pattern = '/<frame(.+?)src=([\'\" ])?(.+?)([ >]+?)/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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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 "<img".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readpic/$image_id?pid=".$this->projectid .$matches[2]. $matches[4];
    } else {
     return "<img".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/picfile/$image_id?pid=".$this->projectid .$matches[2]. $matches[4];
    }
   } else {
    return "<img".$matches[1]."src=".$matches[2].$matches[3].$matches[2].$matches[4];
   }
  }
  private function html_replace( $matches ) {
   if(count($matches) < 4) return '';
   if( empty($matches[3]) ) return '';
   //如果href的鏈接($matches[3])以http或www或mailto開始,則不進行處理
   //if(preg_match('/^[http|www|mailto](.+?)/i',$matches[3])) 
   // return "<a".$matches[1]."href=".$matches[2].$matches[3].$matches[4];
   $matches[3] = rtrim($matches[3],'\'"/');
   //處理錨點
   if(substr_count($matches[3],'#')>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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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 "<a".$matches[1]."href=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
    } else {
     return "<a".$matches[1]."href=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
    }
   } else {
    return "<a".$matches[1]."href=".$matches[2].$matches[3].$matches[2].$matches[4];
   }
  }
  private function iframe_replace( $matches ) {
   if(count($matches) < 4) return '';
   if( empty($matches[3]) ) return '';
   $matches[3] = rtrim($matches[3],'\'"/');
   //處理錨點
   if(substr_count($matches[3],'#')>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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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 "<iframe".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
    } else {
     return "<iframe".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
    }
   } else {
    return "<iframe".$matches[1]."src=".$matches[2].$matches[3].$matches[2].$matches[4];
   }
  }
  private function frame_replace( $matches ) {   
   if(count($matches) < 4) return '';
   if( empty($matches[3]) ) return '';
   $matches[3] = rtrim($matches[3],'\'"/');
   //處理錨點
   if(substr_count($matches[3],'#')>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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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 "<frame".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
    } else {
     return "<frame".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
    }
   } else {
    return "<frame".$matches[1]."src=".$matches[2].$matches[3].$matches[2].$matches[4];
   }
  }
  private function js_replace( $matches ){
   if(count($matches) < 4) return '';
   if( empty($matches[3]) ) return '';
   //處理鏈接
   $arr_html = split(',',$matches[3]);
   $href = $arr_html[0];
   $other = '';
   for($i=0; $i<count($arr_html); $i++)
    $other = $arr_html[$i].", ";
   $other = rtrim($other,"\, ");
   $href =rtrim($href,'\'\"');
   //處理錨點
   if(substr_count($href,'#')>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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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,"/") );
   }
   $relativepath = rtrim($relative_dirname,'/') . '/'.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程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved