的字符串解决:在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);
}
我在控制器中写这段代码。是的,我试图在preg_replace()中使用$ this-> convert_url('$ 1')。它仍然显示convert_url()为未定义函数。 –