问题在于:当找到第一个匹配的关键词时,函数就立即 return 返回了,这意味着只有第一个匹配的关键词会被检测到,后续的关键词即使匹配也不会被检查。
解决方案:
需要修改 collection.class.php 中的过滤逻辑,让所有关键词都能被正确检查:
foreach ($filter_config as $filter_name => $label) {
if (!empty($filterConfig[$filter_name]) && is_array($filterConfig[$filter_name])) {
$matchedKeyword = '';
foreach ($filterConfig[$filter_name] as $keyword) {
$keyword = trim($keyword);
if (!empty($keyword) && strpos($video->$filter_name, $keyword) !== false) {
$matchedKeyword = $keyword;
break; // 找到一个匹配就跳出内层循环
}
}
if (!empty($matchedKeyword)) {
return "{$label} 包含过滤词【<font color=red>{$matchedKeyword}</font>】在禁止采集列表中,跳过采集<br>";
}
}
}
修改说明:
添加了关键词修剪:$keyword = trim($keyword) 确保去除每行首尾的空格。
添加了空关键词检查:!empty($keyword) 避免空行被当作关键词。
使用中间变量:用 $matchedKeyword 记录匹配到的关键词,在内层循环中找到匹配后立即跳出。
在外层判断:在内层循环结束后再判断是否有匹配,然后返回错误信息。
这样修改后,所有行的关键词都会被正确检查,当任何一个关键词匹配时都会触发过滤,而不是只有最后一个起作用。