因此,我写了一个小脚本,它将登录到我的电子邮件中并在每条消息中搜索某些链接。当电子邮件为HTML正文时,一切正常,一切正常。但是,当电子邮件为TEXT时,存在某种差异,无法找到匹配项。
这是我转义链接模式以检查电子邮件的方法。我的可变占位符是*。
$found = false;
$escape = array('\\','/','(', ')', '?', '&');
for ($i = 0; $i < $link_count; $i++) {
foreach ($escape as $e){
$links[$i] = str_replace($e, "\\$e", $links[$i]);
$links[$i] = str_replace('*', '.*', $links[$i]);
}
}
while (true) {
$index = strpos($body, 'http://');
if ($index === false){
break;
}
$body = substr($body, $index);
$part = explode('"', $body, 2);
$part = explode(' ', $part[0], 2);
$part = explode("\n", $part[0], 2);
$part = explode("'", $part[0], 2);
$part = explode("<", $part[0], 2);
$tag = trim($part[0]);
foreach ($links as $link) {
preg_match_all("/$link/", $tag, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$found = true;
}
}
来自HTML电子邮件这是一个匹配项: http://knowndomain.com/something.php \?id = ...... \&md = ...... \&mu = ...... *-> http://matchingdomain.com/couldbe.php?id=1&md=2&mu=tr
但是在文本电子邮件中,相同的检查失败
我的问题是我在这里到底想念什么。检查前的所有输出都相同!?
答案 0 :(得分:0)
所以我发现问题可能没有。.正如我认为的那样,它实际上与HTML或文本电子邮件没有任何关系..实际上这是每个链接都有细微差别的事实。
因此我删除了$ links [$ i] = str_replace('','。',$ links [$ i]);从我的exape循环中放到preg_match之前。
经过测试可以正常工作,所以我暂时不会对此提出疑问。