2015-12-02 72 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()为未定义函数。 –