Webb, Mobila appar och IT-rådgivning

Adaptive Media skapar webb-baserade affärssystem, dynamiska webbplatser och projektleder utveckling av innovativa mobilapplikationer för iPhone och Android.

Dessutom utarbetar vi strategier som gör IT-investeringar lönsamma och levererar kvalitativa produkter och tjänster med hög användbarhet.

Reguljärt uttryck för att spamsäkra epostadresser i en sträng

25 augusti, 2010 av Victor Schelin

I en tid då spam drabbar även de bästa tekniknördarna, är behovet för att spamsäkra webbsystem stort. Till ett av våra webbprojekt var det nödvändigt att alla texter skulle vara helt 100% spamfria (dvs. inga referenser till epostadresser fick förekomma överhuvudtaget, absolut inga ”mailto:namn@företag.com”). Efter en stunds knep och knåp kom vi fram till en bra metod för att göra om epostadresser till spamfria sådana i PHP med hjälp av reguljära uttryck och autogenererade bilder.

/**
* Replace all email addresses with image links
* @param $content	the string content to replace
* @return	string with all email addresses replaced by generated images
*/
function get_email_spam_secured_text($content)
{
return preg_replace("/([A-Za-z0-9._%-]+)\@([A-Za-z0-9._%-]+)/","<img src=\"generate_email_image.php?prefix=$1&suffix=$2\" alt="" />", $content);
}

Det reguljära uttrycket hittar alla förekomster av typen text@mer.text, dvs. text följt av ett @ följt av mer text (inkl. punkter eller liknande). Sedan ersätter vi dessa med en <img> tagg där källan är en fil som genererar vår bild och där parametrarna är det som står innan och efter @. Vår bildfil tar dessa parametrar, sätter ihop de till en epostadress igen och spottar ut en bildström.

Nackdelen med denna lösning är att vi inte kan klicka på adressen för att snabbt få upp vårt epostprogram och skicka ett email till personen, och vi kan inte heller markera adressen. Därför lämpar sig denna lösning då epostadresserna är korta och enkla, som exempelvis ‘namn@företag.se’, och då det helt enkelt är väldigt viktigt att företaget inte får någon spam.

Andra vanliga lösningar är att t.ex. skriva ‘namn [at] företag.se’, men denna metod är inte alls 100% spamsäker samtidigt som det inte här heller går att markera texten och klistra in i ett epostprogram etc.

Filen generate_email_image.php innehåller kod för att göra om en textsträng till en bild. Nedan följer en kodsnutt för hur denna kan se ut (förenklad variant):

header("Content-type: image/png");
$prefix    =   $_GET['prefix'];
$suffix    =   $_GET['suffix'];
$email = $prefix . '@' . $suffix;
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20) or die ("Error");
$bg = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $bg);
$text_color = ImageColorAllocate ($im, 0,0,0);
imagestring($im, 2,0,2, $email, $text_color);
imagepng ($im);

En kommentar till “Reguljärt uttryck för att spamsäkra epostadresser i en sträng”

  1. Johan Vallstrand Skriver:

    En stor ”like” till bilden!

Skriv en kommentar