我有一套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