Priznám sa, k napísaniu tohto ma motivoval Peter Šlosar s článkom E-mail sa oplatí skryť. Píše o utilitke, ktorá dokáže zakódovať e-mailovú adresu a skryť ju tak pred „obyčajnými“ spam-robotmi. Zámerne ich označujem ako obyčajných, pretože dnes sa dá dostať prakticky všade a vydolovať kadejaké informácie z kadejakých zdrojov.
Princíp tohto programu spočíva v tom, že jednotlivé znaky e-mailovej
adresy jednoducho prevedie na ich ASCII
(resp. decimálne) hodnoty a pridajú sa HTML entity (&# a
;). Tie potom HTML parser vášho prehliadača spracuje a spôsobí
to, že e-mailová adresa je pre vás viditeľná a dá sa s ňou pracovať,
zatiaľčo pre robota je to zmes znakov, ktoré neobsahujú čarovný zavináč.
Zároveň program spracuje zakódovanú adresu, prevedie ju na HTML odkaz
<a href=„adresa“>adresa</a>, a aby to ešte
spam-robotu sťažil, vygeneruje JavaScript kód, ktorým rozdelí celú adresu
na niekoľko častí a vypíše ich pomocou metódy
document.write().
Keďže program zmienený na Petrovom blogu je nutné si stiahnúť (ale ešte som ho neskúšal), znamená to, že pri každom prevode e-mailovej adresy je potrebné vykonať jej zakódovanie, čo môže byť v niektorých prípadoch nefektívne. Najmä ak sa jedná o väčšie množstvo adries (napríklad diskusné fórum, atď.). Tento úkon sa dá patrične automatizovať, čím sa práca uľahčí a zrýchli. Použijeme na to jazyk PHP.
Ako na to?
O prevod znakov do ASCII kódu sa
v PHP stará funkcia ord() .
Teda: $ascii_znaku = ord($znak). Stačí tak reťazec (v tomto
prípade e-mailovú adresu) rozdeliť na jednotlivé znaky, zacykliť, pripojiť
HTML kód a vypísaž výsledok. Najvhodnejšie bude to obaliť nejakou
funkciou:
function CodeMail($email, $title = '', $string = '') {
if ($email) {
// najprv rozdelime a prevedieme retazec mailto
$mailto = preg_split('//', "mailto:", -1, PREG_SPLIT_NO_EMPTY);
for ($i = 0; $i < count($mailto); $i++)
$mailto_ascii .= "&#" . ord($mailto[$i]) . ";";
// potom znaky e-mailovej adresy
$znaky = preg_split('//', $email, -1, PREG_SPLIT_NO_EMPTY);
for ($i = 0; $i < count($znaky); $i++)
$email_ascii .= "&#" . ord($znaky[$i]) . ";";
return '<a href="' . $mailto_ascii . $email_ascii . '" title="' . $title . '">' . ($string ? $string : $mail_ascii) . '</a>';
}
}
Funkcií predávame okrem e-mailovej adresy aj nepovinný parameter pre obsah
atribútu TITLE a ak chceme namiesto emailovej adresy zobrazovať
iný reťazec (napr. meno ako odkaz), vyplníme aj parameter
$string. Samozrejme funkcia sa dá upravovať k vlastnému obrazu,
ako napríklad vypisovať adresu v tvare meno (at) domena.tld,
a pod.
Takýto konvertor obsahuje aj formátovač Texy!, kód tejto funkcie je ešte o niečo
menší, ako ten môj (reťazec sa nerozdeľuje pomocou funkcie
preg_split()) :)
Jednoduchšou variantou môže byť nahradenie zavináča samotného jeho
ASCII ekvivalentom, teda napr. meno@domena.tld. Variánt
pre skrytie e-mailu je naozaj strašne veľa a popisovať všetky by nemalo
zmysel. Otázkou je, či je naozaj nutné e-maily pred spammermi skrývať, keď
vlastne stále je možnosť ich odhalenia, veď časom sa každá finta
rozlúskne a spam si cestu k ním nájde…


Táto webová stránka nie je kompatibilná so zastaralými internetovými prehliadačmi.
M@rtin
Zaujmave riesenie…
Urcite vyskusam… :)
22. 01. 2006 @ 14:48 #