PHP: rendere cliccabili mail e link provenienti da un testo
27/03/2012Attraverso Php possiamo filtrare un contenuto di testo (immesso attraverso CMS o estratto da database, ad esempio), rilevare tutte le stringhe che indicano una mail o un sito web e rendere le stesse automaticamente cliccabili.
La funzione che presento oggi ha la particolarità di non utilizzare il classico eregi_replace oramai deprecato e che sarà abbandonato dalle prossime versioni di PHP. Al suo posto preg_replace, di cui segnalo la necessità di delimitare la reg exp con / in apertura e chiusura, l'utilizzo del parametro finale i ad indicarne la recursività e la necessità dell'escape prima dei caratteri speciali inseriti.
Ecco la funzione:
function cliccabili($testo) {
$testo = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_+.~#?&\/\/=]+)/i', '<a href="\\1">\\1</a>', $testo);
$testo = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&\/\/=]+)/i', '\\1<a href="http://\\2">\\2</a>', $testo);
$testo = preg_replace('/([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})/i', '<a href="mailto:\\1">\\1</a>', $testo);
return $testo;
}
Questo un esempio di applicazione pratica (supponendo di aver estratto dal nostro db un campo testo):
function cliccabili($testo) {
$testo = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_+.~#?&\/\/=]+)/i', '<a href="\\1">\\1</a>', $testo);
$testo = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&\/\/=]+)/i', '\\1<a href="http://\\2">\\2</a>', $testo);
$testo = preg_replace('/([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})/i', '<a href="mailto:\\1">\\1</a>', $testo);
return $testo;
}
}
$riga['testo'] = "Venerdì 10 febbraio alle 13,03 il signor Mario Rossi (mariorossi@mail.it) ha visitato il sito http://www.disign.it";
echo cliccabili($riga['testo']);