WP有好多种防垃圾/机器人留言的插件,而且相信大家都有自己的方法,依家讲一个用html5自身特性0服务器资源占用轻松防spam的方法。
首先来睇一段旧的form提交代码
1 2 3 4 |
<form action="1.php" method="get"> <input type="text" name="xxx" /> <input type="submit" value="submit" /> </form> |
再来睇一段用html5新特性的form提交代码
1 2 3 |
<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软件废晒。
再来段增加反击力的代码
1 2 3 4 5 |
<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代码为例子(只含关键部分以供参考)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?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前卫了,不过一句话之佢地都几爽。