Email-Adresse vor Spam schützen

in PHP · Autor: Sebastian Fuchs

Wenn man seine Email-Adresse im Internet veröffentlicht, zum Beispiel im Impressum der eigenen Seite, ist dies immer mit der Gefahr verbunden, dass Spam-Bots beim Durchsuchen des Internets auf diese Emailadresse stoßen.
Die Folge kann dann eine Überschüttung mit Spam-Emails sein. Um das zu verhindern, sollte man die Email-Adresse vor solchen Bots schützen.
Es gibt zwar nie einen 100%-igen Schutz, aber eine Möglichkeit sie zu schützen besteht darin, die Email-Adresse als Grafik anzuzeigen.
Man kennt zwar auch die Variante, die Emailadresse einfach in dieser Form zu schreiben: "email(at)name.xy", aber diese und ähnliche Methoden werden früher oder später auch von den Bots erkannt werden.
Deshalb habe ich mich im Internet erkundigt, wie ich, natürlich dynamisch mit PHP, meine Email-Adresse als Grafik anzeigen lassen kann.
Da ich nirgends eine Lösung fand, die genau meinen Ansprüchen entsprach, habe ich es jetzt einfach selbst gemacht.
Das ganze möchte ich euch jetzt in diesem Tutorial vorstellen. Das Prinzip ist ähnlich dem Erstellen von Captchas, nur dass wir hierfür keine zufällig generierten Codes und sonstige Extras brauchen.

Fangen wir also mit dem Code an. Als erstes muss die Datei erstellt werden, in der die Grafik erzeugt wird.
<?php

# Variablen zuweisen
$email          = 'adresse@domain.tld';
$schriftgroesse = 10;
$schriftart     = 'verdana.ttf';
Als erstes werden einige Werte definiert. $email wird die Email zugewiesen, die später in die Grafik geschrieben werden soll. Danach kommt die gewünschte Schriftgröße in Pixeln und die zu verwendende Schriftart.
Die Schriftartdatei muss später mit auf den Server geladen werden, damit sie verwendet werden kann. Deine Windowsschriftarten findest du im WINDOWS-Ordner unter "FONTS".
Danach wird die Grafik für den Text erstellt.
# Berechnung der Grafikmaße
$zeichengroesse = imagettfbbox($schriftgroesse, 0, $schriftart, $email);
$grafik_breite = $zeichengroesse[2]; // Breite des Bildes in Pixeln
$grafik_hoehe = $schriftgroesse;     // Höhe des Bildes in Pixeln

# Grafik erzeugen
header("Content-Type: image/jpeg", true);
$grafik = imagecreatetruecolor($grafik_breite, $grafik_hoehe);
Mit imagettfbbox() werden Informationen über die Größe der Zeichen des vorher definierten Textes gewonnen. So ist unsere spätere Grafik immer genauso lang wie der Text.
Als Höhe habe ich hier die verwendete Schriftgröße angegeben. Falls die Zeichen des Textes jedoch größer als die normale Höhe sind oder an manchen Stellen überlappen, werden diese Stellen weggeschnitten.
Soll dies verhindert werden, kann die Angabe auch noch verändert werden (z.B. $schriftgroesse+2).
Danach wird der header definiert, damit der Browser später weiß, dass das Dokument eine Grafik enthält.
Als letztes wird mithilfe von imagecreattruecolor() die Grafik mit den vorher bestimmten Maßen erstellt.
# Hintergrund färben
$hintergrund = imagecolorallocate($grafik, 255, 255, 255);
imagefill($grafik, 0, 0, $hintergrund);
Nun kann die Grafik noch eine Hintergrundfarbe bekommen. Dazu müssen die Werte bei der Angabe imagecolorallocate() entsprechend geändert werden. Die jeweiligen Angaben sind RGB Werte. Im Beispiel hätten wir also Weiß als Hintergrundfarbe.
In der folgenden Zeile wird dann mit imagefill() die zuvor erstellte Grafik mit der gewünschten Hintergrundfarbe gefüllt.
Kommen wir nun zum wichtigsten Teil: dem Text.
# Textabstände vom Rand der Grafik
$x_abstand = 0;
$y_abstand = 10;

# Email-Adresse in Grafik schreiben
$schriftfarbe = imagecolorallocate($grafik, 68, 113, 0);
imagettftext($grafik, $schriftgroesse, 0, $x_abstand, $y_abstand, $schriftfarbe, $schriftart, $email);
Als erstes können Abstände des Textes vom Rand definiert werden. Diese Angaben kannst du deinen Wünschen anpassen, am besten einfach beim fertigen Script verschiedene Werte testen.
Danach wird ähnlich wie eben schon bei der Hintergrundfarbe eine Farbe für den Text festgelegt. Auch hier handelt es sich wieder um RGB Werte.
Anschließend wird mit imagettftext() der Text auf die Grafik geschrieben.
Jetzt sind wir schon fast fertig. Fehlt nur noch die Ausgabe der Grafik.
# Grafik ausgeben
imagejpeg($grafik);
imagedestroy($grafik);

?>
Nachdem die Grafik mit imagejpeg() erstellt und ausgegeben wurde wird sie mit imagedestroy() wieder gelöscht, um Speicherplatz zu sparen.
Die Grafik brauchen wir ja nur für eine Ausgabe. Die sieht dann wie folgt aus.
Der ganze Code, den wir gerade erstellt haben, wird in einer PHP Datei und natürlich innerhalb eines PHP Tags gespeichert und z.B. als "emailschutz.php" abgespeichert.
Nun kann die Grafik in einem Dokument deiner Wahl ausgegeben werden.
<img src="emailschutz.php" />
Wie man sieht, wird als Quelle für die Grafik die vorher abgespeicherte PHP Datei angegeben. Falls du sie anders benannt hast, muss natürlich auch dort eine andere Angabe gemacht werden.
Den ganzen Quellcode kannst du dir unter Downloads herunterladen.

Downloads:



· zurück zu "PHP Tutorials"

Lesezeichen

Diese Seite zu Mister Wong hinzufügen Diese Seite zu del.icio.us hinzufügen Diese Seite bei YiGG hinzufügen Diese Seite bei LinkARENA hinzufügen Diese Seite zu alltagz hinzufügen Diese Seite bei iGoogle hinzufügen