最新
版块
发主题
搜索
我的

采集视频名称过滤的bug

njm2lj 4月前 2012

最后一组含有大写字母,则过滤规则无效,如下:

Life 线上的我们

TXQ FICTION

结果依然会采集“Life 线上的我们”。


如果颠倒一下顺序,则可以正常过滤,如下:

TXQ FICTION

Life 线上的我们

这样,就可以过滤掉“Life 线上的我们

最新回复 (4)
  • 海洋 4月前
    0 引用 2
    已收到反馈,待验证。谢谢提交。
  • njm2lj 3月前
    0 引用 3
    好像和大小写没关系。如果是多行关键字,则只有最后一行的起作用。
  • njm2lj 3月前
    1 引用 4

    问题在于:当找到第一个匹配的关键词时,函数就立即 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 记录匹配到的关键词,在内层循环中找到匹配后立即跳出。
    在外层判断:在内层循环结束后再判断是否有匹配,然后返回错误信息。

    这样修改后,所有行的关键词都会被正确检查,当任何一个关键词匹配时都会触发过滤,而不是只有最后一个起作用。

  • 海洋 3月前
    0 引用 5
    njm2lj 问题在于:当找到第一个匹配的关键词时,函数就立即 return 返回了,这意味着只有第一个匹配的关键词会被检测到,后续的关键词即使匹配也不会被检查。解决方案: 需要修改 collection.cla ...
    验证完美,感谢指导。
返回