我已經有相當穩定的PHP表單(在防止垃圾郵件方面),我已經使用多年了但是我想更改captcha使用的字體因爲人們常常無法區分數字「0」和大寫字母「O」,然後他們認爲我的表單「不起作用」,我收到了投訴。我不確定它當前使用什麼字體 - 請參閱here。需要使用不同的字體爲PHP驗證碼圖像
但我想將它更改爲更具可讀性的字體,如「Times New Roman」,Times或serif。
這裏是我的PHP代碼來生成驗證碼圖片:
<?php if (!isset($_SESSION)) session_start(); header("(anti-
spam-content-type:) image/png");
$enc_num = rand(0, 9999);
$key_num = rand(0, 24);
$hash_string = substr(md5($enc_num), $key_num, 5); // Length of
String
$hash_md5 = md5($hash_string);
$_SESSION['verify'] = $hash_md5;
// Fallback
setcookie("verify", $hash_md5, time()+3600, "/");
session_write_close();
// Verification Image Background Selection
$bgs = array("img/1.png","img/2.png","img/3.png");
$background = array_rand($bgs, 1);
// Verification Image Variables
$img_handle = imagecreatefrompng($bgs[$background]);
$text_colour = imagecolorallocate($img_handle, 108, 127, 6);
$font_size = 5;
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];
$horiz = round(($img_w/2)-
((strlen($hash_string)*imagefontwidth(5))/2), 1);
$vert = round(($img_h/2)-(imagefontheight($font_size)/2));
// Make the Verification Image
imagestring($img_handle, $font_size, $horiz, $vert, $hash_string,
$text_colour);
imagepng($img_handle);
// Destroy the Image to keep Server Space
imagedestroy($img_handle);
?>
現在請注意,我的PHP知識是看齊,與一個2歲的詞彙 - 所以請與我裸露。
前些日子我做了一些研究,但無法再找到這些帖子。
我曾嘗試加入$字體和imagestring內,像這樣:
imagestring($img_handle, $font, $font_size, $horiz, $vert,
$hash_string,
,然後一個變量:
$字體= '襯';
但驗證碼不會生成。
我在做什麼錯?我只是希望字體採用serif格式。 有沒有一種簡單的方法來聲明一個字體類型(襯線)這個驗證碼沒有託管一個字體文件或指向它的用戶PC的字體位置(例如:C:\ Windows \ Fonts \ serif.ttf ...原因爲什麼不對於後者是因爲如果有人使用他們的android智能手機然後位置C:\ Windows \ Fonts \ serif.ttf將不起作用)。
「但我想將它更改爲更具可讀性的字體,如」Times New Roman「,Times或serif。」然後抹掉驗證碼。驗證碼的整個要點對於計算機來說是難以閱讀的,因此也就是奇怪的字體。或者,切換到ReCaptcha。 – ceejayoz
由於文字非常容易閱讀,截圖中顯示的驗證碼不太可能有效。爲什麼不使用[Google的reCAPTCHA](https://www.google.com/recaptcha/intro/index.html)之類的內容? – Chris
@ceejayoz ......所以你告訴我,如果它對人眼更具可讀性,那意味着它更容易受到垃圾郵件的侵害?如果我使驗證碼圖像更大,這同樣適用嗎?如果是這樣,那麼測試差異是否很好,看我是否收到更多(或任何)垃圾郵件 – user3364730