我有一套if语句,用于搜索由$ html_part定义的电子邮件的原始hhtml正文,该语句将用相对超链接替换电子邮件的cid:文本<img src="cid:[email protected]">
保存。if语句系列运行不正确
问题是,如果电子邮件的HTML正文仅包含.jpg图像,则会按顺序编号,如image001.jpg,image002.jpg,image003.jpg。如果这是一个.png图像,然后是2个.jpg图像,它会变成image001.png,image002.jpg,image003.jpg。 但目前我只用3张.jpg图像的电子邮件进行测试,但它会将所有电子邮件的cid部分替换为第一个匹配的图像,而不是按顺序排列。现在它被替换的图像是在我有一个side-script的目录中,这是自动完成的。它从电子邮件中提取所有图像,并将它们放在一个文件夹中。
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);
}
把限制较少的条件** **第一,并与最严格的人继续(也许你的输入性病例正在下降在第一种情况下,因为更具限制性)。此外,尝试使用** if/else **逻辑(不仅ifs)或**开关/ case ** – Kani 2012-02-08 20:13:48
是否可以让您的第二个(和第三个)preg_match匹配您刚才替换的字符串第一个(和第二个)preg_replace? – huelbois 2012-02-08 20:14:13
@huelbois这就是我的想法,以及** Kani **我已经使用了else语句,并且它仍然产生相同的结果 – Tower 2012-02-08 20:17:32