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:
<a href="mailto:user@domain.tld">user@domain.tld</a>
Si legge, attiva il mailto
, si stampa e gode della massima portabilità. Purtroppo questo mondo non è perfetto :-( e questo metodo è praticamente inutilizzabile.
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 degli spammer non possono cercare nulla. Di fatto, però, questo metodo comporta del lavoro in più per creare l'immagine. Riassumendo:
- 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 @
e .
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 al momento dell'uso:
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>
con il metodo 2. - 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" ci lascia senza una soluzione definitiva, ma con un ventaglio di possibilità equivalenti da adattare al contesto in cui ci si trova, alle tecnologie impiegate e al gusto personale.
Voi quale preferite? E quale utilizzate?