本文最后更新于2018年12月27日; 如遇到问题,请留言及时通知站长; 欢迎加入 三生三世,一起讨论各种问题!

说明

很多人都有被全英文类似评论的经历,站长最讨厌这类情况。以往,我们都通过插件反垃圾评论;或者极验证啥的,用户验证比较麻烦,比如手机端这类的。站长这里提供一种100以内加法验证,合理有效防止机器垃圾评论。具体实现原理,访客进入页面,php函数首先生成两个随机数,然后把你给的答案比对。如果没填写验证码,反馈无验证码;如果验证码错误,反馈验证码错误。所以,大致上,一个函数实现随机数生成以及前台表单生成,一个函数用于验证,另一个函数用于反馈给评论结果。

function.php

请打开主题function.php文件,在第二行或者最后一行等合理为止插入如下代码

//算术验证评论
function themeInit($comment){
$comment = spam_protection_pre($comment);
}
function spam_protection_math(){
    $num1=rand(1,49);
    $num2=rand(1,49);
    echo "<label for=\"math\">请输入<code>$num1</code>+<code>$num2</code>的计算结果:</label>\n";
    echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" style=\"width:218px\" placeholder=\"计算结果:\">\n";
    echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
    echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function spam_protection_pre($comment, $post, $result){
    $sum=$_POST['sum'];
    switch($sum){
        case $_POST['num1']+$_POST['num2']:
        break;
        case null:
        throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败'));
        break;
        default:
        throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败'));
    }
    return $comment;
}

comments.php

然后打开主题comments.php文件,在适当为止插入如下代码,一般插入在提交评论按钮前;当然访客提交评论跟登录用户提交评论一共有两个地方,站长选择在访客评论提交按钮前插入如下代码。这样,访客评论需要算术验证,站长就不用验证了!

<?php spam_protection_math();?>

Typecho纯代码给你的评论添加算术验证

css相关

关于css部分,由于每个人主题不一样,这里就无法给出统一css代码了。可以自行F12,通过float:left或者float:right调整布局,关于宽度之类的,请直接在function.php文件中插入的算术验证代码中修改,代码中给了示例style="width:218px"

结果展示

站长只给访客做了算术验证处理,这样方便回复你们,省了计算过程!如果你们觉得100以内太难了,请修复function.php中添加的代码中rand后面的数字范围。

Typecho纯代码给你的评论添加算术验证