使用简单代码防范垃圾评论

这两天不停地收到垃圾评论,都是一些乱七八糟的英文和俄文评论,因为我为了及时的看到大家的留言,所以设置的邮箱是139邮箱,结果每收到一个垃圾评论手机就来条短信,简直快要把我折腾死了,实在没有办法,我又祭出了Google大神,总算找到了两个不用插件的简单方法,这下清净了……

常见的垃圾评论有:机器写入的全英文(罗马字)垃圾评论和人工写入的长篇大论的中文广告两种
针对“机器写入的全英文(罗马字)垃圾评论”,网上有人推荐采用“some Chinese please!”插件,因为在通常情况下,用中文写作的blog,其留言、trackback和pingback应该也是包含中文字的。 那么,只要拦截下不包含中文字的留言、trackback和pingback,那么blog接收到spam的概率将大大降低,接近于0。 SCP在留言、trackback和pingback发送到 blog,保存到数据库前,将检查他们是否包含有中文字。 如有,将通过检查保存到数据库中;如没有,将拦截,并返回出错的字句,而且将不保存到数据库中。

即要求写入至少一个中文字符(英文博客例外),这样就无法写入数据库了,而且不影响用户体验,也有人推荐采用验证码,但我感觉验证码很影响用户体验,所以我就没有采用。

不过,我研究了下Some Chinese Please插件,发现实现其主要功能几行代码即可。

用文本编辑器打开 WordPress安装目录下的wp-comments-post.php,查找

1.// If the user is logged in

好,将其替换成:

1.$pattern = '/[一-龥]/u';

2.

3.if(!preg_match_all($pattern, $comment_content, $match)){

4. wp_die( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );

5.}

6.

7.// If the user is logged in

     以上代码实现的基本原理是,判断评论内容是否包含汉字,如果一个汉字都没有,则给出错误提示,评论无法提交,这样垃圾评论也没有存储到数据库中,达到了屏蔽英文垃圾评论的目的。最后以 UTF-8 编码将wp-comments-post.php另存为,覆盖原文件(否则你的博客评论会出错),上传到你的博客空间,一切OK!刷新你的博客,试试在文章评论中输入一串英文字母,看看有什么效果!当然,现在你也可以在我的评论框中输入一串英文,看看什么效果!

针对人工写入的长篇大论的中文广告可采用如下代码防止
在wp-comments-post.php文件的
if ( ” == $comment_content )
        wp_die( __(‘Error: please type a comment.’) );
后面加上
if (strlen($comment_content) > ***(设定的评论字数) )
   wp_die( __(‘Error: 请您讲重点!’) );
if (strlen($comment_content) < 2 )
   wp_die( __(‘Error: 您一字千金吗?’) );

   采用了以上两种方法,完全可以防止中英文的垃圾评论,而且一点不影响用户体验,这下好了,现在就可以停掉Akismet和Some Chinese Please这两款插件了。

发表评论?

12 条评论。

  1. Most of the times blogs are the same but i honestly enjoyed what i read. Cheers !

  2. 哥,你好,太感谢了,操作成功,

    就是已经有评论成功的用户,好象是可以采用纯英文评论的。

    如果是新用户名,用纯英文就不能成功评论。

  3. 好象不行啊,我试了下,你看下面那个没有汉字评论也显示出来 了。

  4. 呵呵 来了 博客挺简洁的哦。 我今天也遇到了这个问题,唉。咋有这么多无聊的人在博客上制造垃圾评论呢?我怀疑他们是不是用工具搞的啊?

  5. 我弄而来,无法回复评论

  6. 这段时间我的垃圾评论很少!呵呵

  7. 不过,我研究了下Some Chinese Please插件,发现实现其主要功能几行代码即可。

    请问,这是你研究出来的?

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>