Uno dei problemi più comuni dello sviluppo web è la pubblicazione degli indirizzi e-mail sulle pagine del sito. Pubblicare in chiaro il proprio indirizzo di posta elettronica quasi certamente lo farà cadere nelle mani di qualche spammer che, con altrettanta probabilità, ci inonderà di mail indesiderate.
D'altronde, non pubblicare la mail è spesso ugualmente dannoso: i metodi di contatto attraverso form o attraverso link non attivi o parzialmente attivi non sono altrettanto immediati e utili e non sempre si adattano al contesto.
Ho raccolto di seguito sei metodi che permettono di "nascondere" un indirizzo e-mail agli spammer, valutando per ciascuno alcune caratteristiche: leggibilità a video, attivazione del mailto
, stampa, compabilità con i vari browser, efficacia della soluzione, usabilità.
Metodo 0. Il mondo perfetto
In un mondo perfetto sarebbe sufficiente:
Si legge, attiva il mailto
Metodo 1. Salvare la mail in una immagine
Un metodo popolare prevede di salvare l'indirizzo all'interno di una immagine. In questo modo, non essendoci testo, i crawler
- Video: sì.
- Stampa: solo se la stampa immagini è abilitata.
- Mailto: no. L'utente è costretto a copiare manualmente l'indirizzo.
- Compatibilità: ampia, ma difficile integrare lo stile.
- Efficacia: elevata.
- Usabilità: molto scarsa.
Metodo 2. Nascondere @
.
Nascondere gli elementi essenziali della mail protegge dai crawler più diffusi; in alcuni ambiti poi, come la pubblicazione di file di testo è anche l'unica soluzione.
user[AT]domain[DOT]tld
In HTML si può optare per una versione leggermente più efficiente, che mostra a video l'indirizzo avvalendosi delle entità. Alcuni crawler convertono le entità in ASCII prima del parsing: in questo caso la soluzione è inutile.
user& #64;domain& #46;tld
- Video: sì.
- Stampa: sì.
- Mailto: solo nel secondo caso.
- Compatibilità: molto ampia.
- Efficacia: media.
- Usabilità: discreta (diffusione), buona nel secondo caso.
Metodo 3. Sostituire tutti i caratteri con le entità HTML
Figlia del metodo 2, questa soluzione converte l'intero indirizzo in entità avvalendosi di una semplice funzione PHP.
function ord_mail($email){ $o = Array(); foreach(str_split(trim($email)) as $v){ $o[] = "& #".ord($v).";"; } return implode('',$o); } echo ord_mail("user@domain.tld");
Ecco il risultato:
& #117;& #115;& #101;& #114;& #64;& #100;& #111;& #109;& #97;& #105;& #110;& #46;& #116;& #108;& #100;
- Video: sì.
- Stampa: sì.
- Mailto: sì.
- Compatibilità: molto ampia.
- Efficacia: buona.
- Usabilità: ottima.
Metodo 4. Offuscare con Javascript
Javascript è un ottimo strumento per manipolare il testo HTML, le soluzioni qui sotto offrono l'immediatezza e l'usabilità del testo in chiaro (metodo 0), elevata efficacia, ma richiedono Javascript attivo.
Questa funzione JS suddivide la stringa in varie parti e poi la assemblarla:
function split_mail(user, domain, tld) { var mail; mail += '<a href="' + 'ma' + 'il' + 'to:' + user; mail += '& #64;' + domain '.' + tld; mail += '">' user + '& #64;' + domain '.' + tld + '<' + '/a>'; document.write(mail); } split_mail('user','domain','tld');
Quest'altra invece, che è la mia preferita, usa l'indirizzo codificato in base64 (al codifica può avvenire lato server con PHP) e poi lo decodifica con un semplice classe
var mail = Base64.decode("dXNlckBkb21haW4udGxkCg=="); document.write("<a href=\"mailto:"+mail+"\" class=\"mail\">"+mail+"</a>");
- Video: sì.
- Stampa: sì.
- Mailto: sì.
- Compatibilità: richiede Javascript, può eventualmente essere utilizzato il tag
<noscript>
- Efficacia: elevata.
- Usabilità: ottima.
Metodo 5. Invertire la stringa con CSS
Questo è un metodo curioso: in pratica si scrive la mail al contrario e poi la si "raddrizza" per gli utenti via CSS:
<span style="unicode-bidi:bidi-override;direction:rtl;">dlt.niamod@resu</span>
- Video: sì.
- Stampa: sì.
- Mailto: no.
- Compatibilità: richiede CSS anche per la stampa.
- Efficacia: elevata.
- Usabilità: scarsa.
Metodo 6. Inserire dei commenti HTML nell'indirizzo
Può essere un metodo rapido alternativo alla prima soluzione del metodo 2:
user<!--nospam-->@domain<!--nospam-->.tld>
- Video: sì.
- Stampa: sì.
- Mailto: No.
- Compatibilità: Molto ampia.
- Efficacia: discreta.
- Usabilità: discreta.
Conclusioni
Come al solito, l'approccio "ci sono molti modi per farlo
Voi quale preferite? E quale utilizzate?