最近有朋友说自己的Discuz论坛每天遭英文垃圾帖子灌水,很是恼火,让我帮忙解决下。我看了下他论坛上的垃圾信息,总体特点是标题全英文,于是就提出了禁止全英文标题的思路,经过实践,纯英文的垃圾信息基本全被阻拦,证明该方法有效。现分享给大家,以供参考。
- 修改 /source/function/function_post.php 文件,找到:
if(dstrlen($subject) > 80) {
return 'post_subject_toolong';
}
在下边增加代码:
if(strlen($subject) == mb_strlen($subject))
{
return 'non_full_english';
}
2.修改 /source/language/lang_message.php文件,找到:
'post_message_tooshort' => '抱歉,您的帖子小于 {minpostsize} 个字符的限制',
在下边增加代码:
'non_full_english' => 'Sorry, your post must contain Chinese words.',
当然,如果你想要更好的反英文垃圾信息的效果,就把 Sorry, your post must contain Chinese words. 这句话改成中文的,不会中文的可能就会看不懂是什么意思了。
关于Discuz文件function_post.php的修改,很多用了正则来判断是不是全英文,这样是可以的,但在执行效率方面不如比较字符长度高效,所以采取了比较字符长度的方法来判断是否全英文。当然了,此法只对纯英文有效,如果是俄语的话,就得检测是否包含中文了。修改function_post.php时可以用以下语句,这时标题必须含有中文字符才能发帖。
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $subject)===0){
return 'non_full_english';
}