PHP: funzione proteggiMail()

Loading

Torna alla pagina delle funzioni

Questa funzione prende come parametro un indirizzo e-mail e produce un link per inviare la mail, scritto in codice ASCII, in modo che l’utente sia in grado di inviare una mail, ma i sistemi che scansionano le pagine alla ricerca di mail da “rubare” non siano in grado di prelevare l’indirizzo.

function proteggiMail($str){
    // Variabile che conterrà la stringa di output (in formato HTML entità numeriche)
    $r = '';

    // Aggiungo il prefisso mailto per renderla un vero link di email
    $str = 'mailto:' . $str;

    // Scorro ogni carattere della stringa, dalla posizione 0 fino alla fine
    for($i = 0; $i < strlen($str); $i++){

        // Estraggo il singolo carattere in posizione $i
        $char = substr($str, $i, 1);

        // Ottengo il valore ASCII/Unicode del carattere corrente con ord()
        // Quindi trasformo quel numero in una entità HTML numerica
        $r .= '&#' . ord($char) . ';';
    }

    // Restituisco la stringa con tutti i caratteri convertiti in entità numeriche
    return $r;
}

Spiegazione

Questa funzione protegge visivamente un indirizzo email da semplici robot/spider di raccolta:

  • Trasforma ogni carattere (inclusi spazi, lettere e @) nella corrispondente entità numerica HTML (&#...;).
  • Il risultato, quando inserito in una pagina HTML, viene visualizzato correttamente come mailto:indirizzo@example.com, ma in realtà nel codice sorgente compare solo una sequenza di entità numeriche.
  • Questo rende più difficile per alcune trivellatrici di email la lettura del vero indirizzo dal sorgente, senza usare JavaScript o altri metodi più complessi.

Esempio

proteggiMail("info@webtocom.com");

Genera qualcosa come:

&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#110;&#102;&#111;&#64;&#119;&#101;&#98;&#116;&#111;&#99;&#111;&#109;&#46;&#99;&#111;&#109;

Quando visualizzato in pagina, il browser lo mostra come un link mailto: normale, ma per un semplice scraper di testo appare come una sequenza di codici.