一系列if语句运行不正确


Series of if statements functioning incorrectly

我有一组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);
}

您的preg_replace匹配$html_part中$find的所有实例。但是在$find中,您只更改了$m[2]部分,而没有重新插入刚刚匹配的$m[1]。

不确定,但你应该有这样的东西(未测试):

$find = '/cid:'$m[1].'.'.'.$m[2].'@([^"]*)/';

这不起作用的原因是preg_replace替换了所有匹配项。您传入的regex正在搜索具有相同扩展名的所有图像。

您所拥有的:

$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
/cid:([^"@]*).jpg@([^"]*)/ - match all jpgs

你想要的是:

$find = '/'.$m[0].'/';
/cid:image001.jpg@1REG5DS/ - match only this jpg file

改为使用:

if(this is it){
//somecode
}elseif(this is it){
//somecode
}