这是我第一次在这里发帖,因为这也是我第一次决定从头开始为自己建立一个网站。我正在创建一个带有基本验证码脚本的联系页面。由于您可能认为疯狂的原因,我想将验证码显示为文本。我决定反对png,因为(反)别名是非常糟糕的透明背景,我不认为我的网站会引起太多不必要的注意。
这是我的captcha.php
<?php
session_start();
$characters_on_image = 4;
$possible_letters = '0123456789';
$code = '';
$i = 0;
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}
echo $code;
header('Content-Type: text/plain');
$_SESSION['code'] = $code;
?>
我遇到的问题是,如果我使用<?php print $_SESSION['code']; ?>
,它将打印以前的代码。我的编程非常复杂,我想知道是否有办法在<label>
标记中显示当前生成的代码?
答案 0 :(得分:2)
而不是纯文本考虑使用FIGlet字体:
Font: big
__ __
| \/ |
| \ / | ___ ___
| |\/| |/ _ \ / _ \
| | | | (_) | (_) |
|_| |_|\___/ \___/
这是一个用来做它的PHP库
http://bolknote.ru/files/figlet/
不幸的是,网页是俄语的,因此here是Google翻译过的(请注意,翻译人员已经破坏了代码示例的布局,因此您可能需要返回原始版本):
答案 1 :(得分:2)
您还可以输出看起来像普通(但不是)的Unicode字符,并要求用户重复这些字符。西里尔字母有许多看起来很熟悉的拉丁文字符,但编码方式不同:
А vs A В vs B Е vs E Ѕ vs S І vs I К vs K
М vs M Н vs H О vs O Р vs P Т vs T Х vs X
这很容易破解,但易于实施且易于用户解决。
(关于你的代码示例:跳过整个会话事件,只需从captcha.php文件中回显CAPTCHA。确保包含解决方案的哈希值。)