2015-12-02 33 views
1

的字符串解決:在codeignitor

$string = '<img width="624" height="36" id="Picture_x0020_3" src="cid:[email protected]" alt="cid:[email protected]">'; 

的作用

final_content = preg_replace('~src=["]([^"]+)["]~e', "'src=\"data/'.convert_url('$1') . '\"'", $string); 
function convert_url($url) 
{ 
    if (preg_match("#^cid?:#", $url)) { 
     $url = parse_url($url, PHP_URL_PATH); 
    } 
    $url2 = substr($url, 0, strpos($url, "@")); 
    $url2 = 'data/143-'.$url2; 
    return basename($url2); 
} 

我想替換從上述字符串圖像源從preg_replace函數調用的函數。

實際圖案:SRC = 「CID:[email protected]

替換:SRC = 「數據/ image002.png」

該腳本在正常工作正常PHP代碼,但因爲我使用CodeIgnitor函數的調用是不可能的傳統方式。

經過分析發現,很多答案發現使用preg_replace_callback代替。

使用在CodeIgnitor preg_replace_callback():

$final_content = preg_replace_callback(
      '~src=["]([^"]+)["]~', 
      array($this, 'convert_url'), 
      $string); 

爲CodeIgnitor的功能:

function convert_url($matches) 
    { 
     if (preg_match("#^cid?:#", $matches[1])) { 
      $url = parse_url($matches[1], PHP_URL_PATH); 
     } 
     $url2 = substr($url, 0, strpos($url, "@")); 
     $url3 = 'src=\"data/'.$url2.'\"'; 
     return basename($url3); 
    } 

中的作用包括替換的模式(即, 'CID:' 與「數據/ 143-')以及修剪內容(即在@之後)。

找到了解決辦法:

實測值通過改變由preg_replace_callback preg_replace函數的溶液和用於陣列,以調用該函數。

由於preg_match(「#^ cid?:#」,$ url)在函數中不起作用,因此還對convert_url()做了進一步更改。

/e修飾符需要被替換/我因爲它已被棄用。

替換的preg_replace與preg_replace_callback從功能

$final_content = preg_replace_callback(
      '~src=["]([^"]+)["]~i', 
      array($this, 'convert_url'), 
      $string2); 

拆下的preg_replace和使用了不同的技術以提取字符串。

function convert_url($matches) 
    { 
     $url = $matches[0]; 
     $url2 = $this->get_string_between($url,'src="cid:','@'); 
     $urls = "'$GLOBALS[id]-$url2'"; 
     $url4 = 'onclick="open_img('.$urls.')" src="data/'.$GLOBALS['id'].'-'.$url2.'"';  
     return strtolower($url4); 
    } 

    function get_string_between($string,$start,$end){ 
     $string = " ".$string; 
     $ini = strpos($string,$start); 
     if ($ini == 0) return ""; 
     $ini += strlen($start); 
     $len = strpos($string,$end,$ini) - $ini; 
     return substr($string,$ini,$len); 
    } 

回答

0

你在哪裏編寫此代碼?在查看頁面還是控制器?如果你將這段代碼寫入控制器,那麼需要調用這樣的函數:$ this-> convert_url('$ 1')。

+0

我在控制器中寫這段代碼。是的,我試圖在preg_replace()中使用$ this-> convert_url('$ 1')。它仍然顯示convert_url()爲未定義函數。 –