我有一组if语句,用于搜索$ html_part定义的电子邮件的原始hhtml正文,它会将电子邮件的cid:text <img src="cid:image001.jpg@1REG5DS">
替换为正在保存的实际图像的相对超链接。
问题是,如果电子邮件的html正文仅包含.jpg图像,则会按顺序编号,如image001.jpg,image002.jpg,image003.jpg。如果首先是.png图像,然后是2个.jpg图像,它将成为,image001.png,image002.jpg,image003.jpg。 但目前我正在测试它只有3个.jpg图像的电子邮件,但它用第一个匹配的图像替换所有电子邮件的cid部分,而不是顺序。现在它被替换的图像在目录中我有一个侧脚本,它会自动执行此操作。它从电子邮件中提取所有图像并将它们放在一个文件夹中。
if语句有什么问题,为什么不相应替换?
/***************************** 1st image in email**********************************/
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png1;
if ($m[2] == 'jpg') $replace = $jpg1;
if ($m[2] == 'gif') $replace = $gif1;
if ($m[2] == 'bmp') $replace = $bmp1;
$html_part = preg_replace($find, $replace, $html_part);
}
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png2;
if ($m[2] == 'jpg') $replace = $jpg2;
if ($m[2] == 'gif') $replace = $gif2;
if ($m[2] == 'bmp') $replace = $bmp2;
$html_part = preg_replace($find, $replace, $html_part);
}
/***************************** 3rd image in email**********************************/
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png3;
if ($m[2] == 'jpg') $replace = $jpg3;
if ($m[2] == 'gif') $replace = $gif3;
if ($m[2] == 'bmp') $replace = $bmp3;
$html_part = preg_replace($find, $replace, $html_part);
}
答案 0 :(得分:0)
改为使用:
if(this is it){
//somecode
}elseif(this is it){
//somecode
}
答案 1 :(得分:0)
你的preg_replace匹配$ html_part中$ find的所有实例。 但是在$ find中,你只有$ m [2]部分发生变化,你不会重新注入你刚刚匹配的$ m [1]。
不确定,但你应该有类似的东西(未经测试):
$find = '/cid:'$m[1].'.'.'.$m[2].'@([^"]*)/';
答案 2 :(得分:0)
这不起作用的原因是preg_replace
取代所有匹配。传入的正则表达式是搜索具有相同扩展名的所有图像。
你有什么:
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
/cid:([^"@]*).jpg@([^"]*)/ - match all jpgs
你想要的是:
$find = '/'.$m[0].'/';
/cid:image001.jpg@1REG5DS/ - match only this jpg file