我试图让这个if语句如下:如果第一个字符串位置是.png,那么从大海捞针获得$ png1,但如果第一个字符串位置是.jpg,那么从大海捞针获取$ jpg1,但是如果它是.gif,从haystack获取$ gif1,否则如果找不到它们,那么字符串位置是.bmp所以得到$ bmp1
这是我尝试过的,但它没有正确解析:
/***************************** 1st image in email**********************************/
// if first occurence is .png get $png1 needle from haystack
if (preg_match('/cid:([^"@]*).png@([^"]*)/', $html_part))
{ $find = '/cid:([^"@]*).png@([^"]*)/';
$replace1 = $png1;
$html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .jpg get $jpg1 needle from haystack
elseif (preg_match('/cid:([^"@]*).jpg@([^"]*)/', $html_part))
{ $find = '/cid:([^"@]*).jpg@([^"]*)/';
$replace1 = $jpg1;
$html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .gif then get $gif1 needle from haystack
elseif (preg_match('/cid:([^"@]*).gif@([^"]*)/', $html_part))
{ $find = '/cid:([^"@]*).gif@([^"]*)/';
$replace = $gif1;
$html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .bmp then get $bmp1 needle from haystack
else
{ $find = '/cid:([^"@]*).bmp@([^"]*)/';
$replace = $bmp1;
$html_part = preg_replace($find, $replace, $html_part);
}
并重复了5张图片 问题是if语句不会像我希望的那样返回。他们只是将参考文献替换为整个序列中匹配的最后一个东西(按重复这5次的顺序)
示例$ html_part,其中添加了换行符以供显示:
<b>Bold Text.</b> <i>Italicized Text.</i> <u>Underlined Text.</u> Plain Unformatted Text.
<img width=183 height=183 id="Picture_x0020_3" src="cid:image001.png@01CCCB31.E6A152F0"
alt="Description: Description: Description: cid:image001.png@01CCC701.5A896430">
<img width=153 height=145 id="Picture_x0020_2" src="cid:image002.jpg@01CCCB31.E6A152F0"
alt="Description: Description: cid:image002.jpg@01CCCB1D.D3A29740"><img width=182 height=123
id="Picture_x0020_1" src="cid:image003.jpg@01CCCB31.E6A152F0"
alt="Description: Description: cid:image003.jpg@01CCCB1D.D3A29740">
有人可以帮我找到解决方法吗?感谢
答案 0 :(得分:0)
当您使用$replace1
时,您正在使用$replace
。
如果这只是你问题中的一个错字,这是一个更紧凑的方式来做同样的事情:
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
$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);
}
答案 1 :(得分:-1)
我相信我可能终于找到了一个非OOP用于php的可爱变量
// Slightly verbose for demo purposes
$path = 'C://test.jpg';
// Get the path info with PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION and PATHINFO_FILENAME.
$pathinfo = pathinfo($path);
// Check file extensions first to avoid E_NOTICE of index 'extension'
if (isset($pathinfo['extension']) !== false)
{
// Get the file extension and append '1' as per OP's spec
$extension = $pathinfo['extension'] . '1';
// Make sure that the image exists before using it ($jpg1)
if (isset($$extension) !== false)
{
// Funny stuff
}
}
在此示例中,$ extension的值最终为'jpg1',因此如果将$$扩展名传递给isset(),则函数会检查$ jpg1是否已设置。
关于最初发布的代码的快速评论:
而不是迭代地调用preg_match,直到找到结果,你找到它最好一次识别文件扩展名然后使用开关(elseif很好),因为只需要一个核心字符串比较。