将字符串绘制成图像是一种方便的方法,可以伪装电子邮件地址,使垃圾邮件嗅探器难以轻易获取。创建包含电子邮件的动态图像的唯一问题是,要显示的电子邮件必须通过查询字符串传递,以便静态HTML可以使用它。因此,电子邮件必须进行轻微加密,以免破坏不直接键入电子邮件地址的目的。我编写了以下脚本来做到这一点
将以下内容另存为 email.php
<?php
if ($_GET['addr'] != "") {
$msg = $_GET['addr'];
$msg = preg_replace("/\[dot]/",".",$msg);
$msg = preg_replace("/\[at]/","@",$msg);
$final = "";
for ($i=0; $i<=strlen($msg); $i++) {
$final .= substr($msg, strlen($msg)-$i, 1);
}
$msg = $final;
$char_width = 8;
$char_height = 17;
$padding = 3;
$width = $padding*2+strlen($msg)*$char_width;
$height = +$padding*2+$char_height;
$im = imagecreatetruecolor($width,$height);
imagealphablending($im, FALSE);
imagesavealpha($im, TRUE);
$bg = imagecolorallocatealpha($im, 255, 255, 0, 100);
$text = imagecolorallocatealpha($im, 0, 0, 0, 0);
imagefilledrectangle ($im, 0, 0, $width, $height, $bg); imagestring($im, 4, $padding, $padding, $msg, $text);
} else {
$im = imagecreatetruecolor(1,1);
imagealphablending($im, FALSE);
imagesavealpha($im, TRUE);
$bg = imagecolorallocatealpha($im, 255, 0, 0, 125);
imagefilledrectangle ($im, 0, 0, 1, 1, $bg); }
header('Content-type: image/jpg');
imagepng($im);
imagedestroy($im);
?>
如果脚本在没有电子邮件地址的情况下调用,它将输出一个 2x2 像素的透明图像。
要调用脚本生成电子邮件 "user@home.com",HTML 标签将是
<img src="email.php?addr=moc[dot]emoh[at]resu">
要“加密”传递给脚本的电子邮件地址,请反向编写地址,并将 "." 替换为 "[dot]",并将 "@" 替换为 "[at]"。这并不是最牢不可破的保护措施,但它可以阻止大多数 casual 的电子邮件嗅探器。