【发布时间】:2018-09-29 12:12:12
【问题描述】:
所以我编写了一个小脚本,它会登录到我的电子邮件并在每封邮件中搜索某些链接。当电子邮件是/具有 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
但在文本电子邮件中,同样的检查失败
我的问题是我到底想念什么。检查前的所有输出都一样!?
【问题讨论】:
-
您的短信是否使用quoted-printable encoding ?您可能需要先检测它是否是多部分消息并根据需要进行解码。
-
文本邮件未使用带引号的可打印编码
-
运行正则表达式时,
$tag中的链接是否存在? -
是的,它们在 $tag 变量中。
-
出现问题时能否请您添加
$link和$tag的值?
标签: php regex preg-match-all