Quando l'utente va nel campo textarea e nel suo messaggio inserisce anche un url o un'email, questi vorrei che poi a video appaiano come link. Però la trasformazione a link deve essere automatica senza bisogno di inserire i tag.
Quando l'utente va nel campo textarea e nel suo messaggio inserisce anche un url o un'email, questi vorrei che poi a video appaiano come link. Però la trasformazione a link deve essere automatica senza bisogno di inserire i tag.
Devi usare le espressioni regolari, precisamente preg_replace.
Cerca questi termini nel forum e troverai sicuramente qualcosa.
Sul sito php.net trovi la guida ufficiale con alcuni esempi.
Ciaoooo!!!!!
Ora con gli url ho risolto, che codice metto per le email?
Codice PHP:
//Se ne textarea si scrive un'url lo rende linkabile automaticamente
$messaggio = preg_replace('/((http(s)?:\/\/)|(www\\.))((\w|\.)+)(\/)?(\S+)?/i','<a href="\0">\0</a>', $messaggio);
$messaggio = str_replace("www.","http://www.",$messaggio);
$messaggio = str_replace("http://http://","http://",$messaggio);
Stesso discorso di prima, sempre l'espressioni regolari, solo con diverso pattern.
Ciaoooooo!!!!
Guarda qui.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
prova questo per le mail!Codice PHP:
preg_replace("#([_\.0-9a-z-]+@[0-9a-z][0-9a-z-]+\.+[a-z]{2,3})#is", "<a href=\"mailto:$1\">$1</a>", $origine);
I due cancelletti dovrebbero indicare che la "parola" da trovare non si trova necessariamente all'inizio o alla fine della stringa.
$1 è il primo (e, in questo caso, anche l'ultimo) valore restituito dall'espressione regolare, quindi è l'indirizzo e-mail.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
cancelletti: le espressioni regolari sono solitamente delimitate da / .... /, ma è una convenzione! in realtà puoi usare qualsiasi simbolo per definirne l'inizio e la fine, basta che sia lo stesso ad entrambi gli estremi. In questo caso, Jostock ha usato il #.
Poter cambiare simbolo è comodo quando hai un'espressione regolare piena al suo interno di /, così non devi stare li a proteggerle tutte (con "\/") e diventa più facile da leggere
Ho notato una cosa, ho sostituito la tua reg con la mia che uso per validare il campo email.
Messa cosi come sotto viene inviata la validazione ma a video il campo textarea appare vuoto mentre quella che mi hai dato funziona, non capisco perchè mi valida il campo email e non funziona se inserita cosi:
Codice PHP:
$messaggio = preg_replace("^([-_.#$&%+a-z0-9]+)[@][a-z]+(\.[-_#$&a-z0-9]{2,})*(\.[a-z]{2,4})$","<a href=\"mailto:$1\">$1</a>",$messaggio);
perché non hai messo i delimitatori all'espressione regolare, come avevo giusto spiegato nel mio post precedente metti uno / all'inizio ed uno alla fine della regexp
ora, non ho idea di cosa si l'input che arriva da $messaggio, però quella espressione regolare cerca una riga che contiene solo un indirizzo email, perché c'è ^ e $ agli estremi. Non è più l'espressione che ti aveva dato Jostock, e se l'hai cambiata non si comporterà più allo stesso modo... quindi chissà cosa cerca nella stringa
Uscendo un attimo dal lato tecnico (che vedo è stato spiegato molto bene)..
vorrei spostare l'attenzione sul fatto che i poverini che innocentemente inseriranno i lloro email nei tuoi messaggi si ritroveranno una nuova fonte di SPAM in più.
Linkare con mailto: un indirizzo email è come urlare al mondo: "eccomi spammatemi! intasatemi la casella mail di robaccia", e in questo caso peggio ancora non solo tua ma dei malcapitati commentatori, magari ignari del destino dei loro indirizzi email.
Come avrai notato in alcuni blog e simili dove si fanno lasciare commenti (a utenti non registrati) si chiede loro di inserire la mail... ma viene anche specificato chiaramente che questi indirizzi NON saranno assolutamente linkati nella pagina.
Ultima modifica di heracleum : 11-08-2007 alle ore 13.32.08
Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)
Nel mio campo textarea uno può inserire quello che vuole come del resto in tutti i textarea, perciò se uno scrive volontariamente la propria email sa a cosa va incontro
EDIT: Scusa ma c'è qualcosa che non afferro: la reg in questione non deve validare l'email? Quel codice l'ho messo in modo che quando l'utente inserisce l'email nel textarea si autolinca.
Ora ho tolto le parti estreme ma si autolinca a metà (solo la parte prima della chiocciola)
Codice PHP:
$messaggio = preg_replace("/([-_.#$&%+a-z0-9]+)[@][a-z]+(\.[-_#$&a-z0-9]{2,})*(\.[a-z]{2,4})/","<a href=\"mailto:$1\">$1</a>",$messaggio);
Ultima modifica di debug : 11-08-2007 alle ore 18.18.57
Temo che una cosa sia scrivere un indirizzo email testualmente e ben altra golosa attrattiva per gli spambot (anche quelli fatti dai ragazzini di 8 anni) un link con un "comodissimo" e riconoscibilissimo mailto: all'inizio. Comunque... la mia era una riflessione, nel caso uno non fosse imformato dei rischi, se pensi di aver valutato già tutto, allora ok.
Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)
@heracleum: un mio amico ha iniziato a registrare caselle email con dentro nospam. tipo gianninospam@qualcosa.it. di colpo ha smesso di arrivargli spam, ma anche molta posta normale credo
@photoman: mi sta scuocendo la pasta, lo sento. Quella non è la stessa espressione regolare di prima, l'hai cambiata, non puoi pretendere che funzioni allo stesso modo. I simboli $1 $2 $3 sono collegati alle parentesi tonde della regexp, in ordine di apparizione. Tu hai messo tre gruppi di parentesi, e se noti vedi solo il primo...
non importa, hai cambiato il pattern quindi l'espressione non va più bene. Riparti dalla cima del thread e rileggi, c'è quella corretta.
Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)
Ho risolto, questa funziona, ho solo aggiunto le 2 parentesi tonde estreme in modo da creare un solo gruppo, ho ina domanda: quel is alla fine della vostra reg a cosa serve?
Codice PHP:
$messaggio = preg_replace("/(([-_.#$&%+a-z0-9]+)[@][a-z]+(\.[-_#$&a-z0-9]{2,})*(\.[a-z]{2,4}))/is","<a href=\"mailto:$1\">$1</a>",$messaggio);
allora, adesso che la pasta è cotta posso prendermi più tempo
la tua regexp èche vuol dire:Codice:/([-_.#$&%+a-z0-9]+)[@][a-z]+(\.[-_#$&a-z0-9]{2,})*(\.[a-z]{2,4})/
- una sequenza non vuota di [-_.#$&%+a-z0-9] seguita da
- un carattere nell'insieme [@]. In realtà sarebbe sufficiente scrivere @.
- una sequenza non vuota di [a-z] - nota che questa non è fra tonde, quindi non finisce in $n
- una sequenza anche vuota di sottodominii (riconosciuti da \.[-_#$&a-z0-9]{2,}) e per finire
- un unico dominio di primo livello \.[a-z]{2,4}
Le tre parentesi tonde vanno a riempire $1, $2 e $3. Il resto va perso nella trasformazione Aggiungi un paio di tonde la dove mancano e dovrebbe funzionare anche lei.