WP有好多种防垃圾/机器人留言的插件,而且相信大家都有自己的方法,依家讲一个用html5自身特性0服务器资源占用轻松防spam的方法。
首先来睇一段旧的form提交代码
<form action="1.php" method="get">
<input type="text" name="xxx" />
<input type="submit" value="submit" />
</form>
再来睇一段用html5新特性的form提交代码
<form action="1.php" method="get" id="fff1"></form>
<input type="text" name="xxx" form="fff1" />
<input type="submit" value="submit" form="fff1" />
呢度用html5的新特性,input唔使系form里边,指明 form="某个form的id" 就得了。
以上html5代码净系可以系支持html5的浏览器有效,对旧浏览器无用,就是提交唔到的,以旧浏览器做核果D spam软件废晒。
再来段增加反击力的代码
<form action="1.php" method="get" id="fff1"></form>
<form action="http://127.0.0.1" method="get">
<input type="text" name="xxx" form="fff1" />
<input type="submit" value="submit" form="fff1" />
</form>
所谓的反击力只是提交畀佢自己,以上代码html5浏览器是正常提交畀1.php,唔支持的就是自己咯。
或者改成提交畀另一个php,果个php用来话畀用户听你的浏览器好OUT。
一段以我自己的comments.php代码为例子(只含关键部分以供参考)
<?php
// 用来给comment_id_fields()的生成代码加form="commentform",加到form之前的任何位置
function comment_id_fields_addform($result)
{
return str_replace('<input', '<input form="commentform"',$result);
}
add_filter('comment_id_fields', 'comment_id_fields_addform');
?>
<form action="https://ztjal.info/needhtml5.php" method="post" id="commentform1">
<input type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="40" maxlength="40" tabindex="1" form="commentform" <?php if ($req) echo 'required'; ?>>
<input type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" size="40" maxlength="40" tabindex="2" form="commentform" <?php if ($req) echo 'required'; ?>>
<input type="url" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" size="40" maxlength="40" tabindex="3" form="commentform">
<textarea name="comment" id="comment" rows="8" tabindex="5" form="commentform" required></textarea>
<input name="submit" type="submit" id="submit" tabindex="6" form="commentform" value="<?php bue_dream_get_txt('txt_submit_comment'); ?>" />
<?php
comment_id_fields();
// 代替 do_action('comment_form', $post->ID);
if ( current_user_can('unfiltered_html') )
{
$action ='unfiltered-html-comment_' . $post->ID;
$name = '_wp_unfiltered_html_comment';
$name = esc_attr( $name );
$nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . '" form="commentform" />';
echo $nonce_field;
}
?>
</form>
<form action="<?php bloginfo('url'); ?>/wp-comments-post.php" method="post" id="commentform"></form>
以由众多spam验证佢的有效性,有效期到spam软件支持html5为止,仲有唔好唔记得要用系html5写的网页先得。
经我手头上现有的浏览器测试,目前支持呢种html5 input特性的净系是Firefox7.0.1,Chrome14,15。
Opera11.52有支持问题。
IE9、IE10预览版2,全部收皮。
目前以IE居多的小白群体,呢种方法有D前卫了,不过一句话之佢地都几爽。