У меня есть набор операторов if, которые выполняют поиск по сырому телу hhtml электронной почты, заданного $ html_part, который заменит электронный адрес электронной почты: текст <img src="cid:[email protected]">
с относительной гиперссылкой на фактическое изображение, которое сохранены.Операции с неверными операциями
Проблема в том, что если тело html электронной почты содержит только изображения .jpg, они нумеруются последовательно, такие как image001.jpg, image002.jpg, image003.jpg. Если theres a .png изображение сначала, то 2 .jpg изображения, следующие за ним, это станет, image001.png, image002.jpg, image003.jpg. Но на данный момент я тестирую его с помощью электронной почты с изображениями только 3. .jpg, но вместо всех последовательно заменяемых частей электронной почты электронной почты заменяется первым совпадающим изображением. Теперь образ, который он должен заменить, находится в каталоге, для которого у меня есть боковой скрипт, который делает это автоматически. Он извлекает все изображения из электронной почты и помещает их в папку.
Что не так с утверждениями 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) или ** switch/case ** – Kani
Возможно, ваш второй (и третий) preg_match соответствует строке, которую вы только что заменили в первый (и второй) preg_replace? – huelbois
@huelbois Это то, что я тоже думаю, и ** Kani ** Я также использовал инструкции else, и все же он дает тот же результат – Tower