View Full Version : Ho bisogno di uno script...
firefox88
16-09-2005, 17:08
Salve a tutti,
ho bisogno di uno script per il mio blog, e ho pensato di chiedere a voi che siete sempre così gentili!
Il problema è questo: per ragioni di sicurezza, non autorizzo l'inserimento di codice HTML nei commenti. Ovvero, quando un utente scrive un commento, esso viene elaborato da un'apposita funzione che converte "<" e ">" in entità HTML, cosicché il browser non le interpreti come tag.
Tuttavia, vorrei dare alla possibilità agli utenti di inserire link cliccabili nei commenti. Perciò ho creato questa funzione:
function crea_link($testo) {
$testo = ereg_replace('http([^\ <>]+)','<a href="http\\1">http\\1</a>',$testo);
return $testo;
}
In questo modo se l'utente inserisce un link viene trasformato in un link cliccabile (<a href=...).
Ed ecco il punto: se gli utenti inseriscono link troppo lunghi, mi sfaldano il design del sito, allargando la tabella oltre la misura appropriata. Perciò mi serve che la funzione "tagli" i link dopo il 30° carattere, un po' come fa questo forum :)
Ma come posso fare????
Grazie
firefox88
16-09-2005, 20:28
up :(
perchè onn usi qualcosa del tipo:
$len = 30; //lunghezza massima
$append = "...";
if(strlen($testo) > $len) {
$testo = substr($testo, 0, $len);
$testo .= $append;
}
....
ovviamente il controllo dovrà essere fatto sull'etichetta del link, non su tutta la stringa
firefox88
17-09-2005, 07:39
perchè onn usi qualcosa del tipo:
$len = 30; //lunghezza massima
$append = "...";
if(strlen($testo) > $len) {
$testo = substr($testo, 0, $len);
$testo .= $append;
}
....
ovviamente il controllo dovrà essere fatto sull'etichetta del link, non su tutta la stringa
E' chiaro. Il punto è che tu dai per scontato che $testo è solo un link. Invece è un testo vero e proprio, contenente dei link.
E' chiaro. Il punto è che tu dai per scontato che $testo è solo un link. Invece è un testo vero e proprio, contenente dei link.
'giorno!
immaginavo che non chiedevi questo :)
consideralo come un up ;)
se mi viene in mente qualcosa...
ps. posteresti lo script per sostituire i < > ? ne ho bisogno proprio in questo momento :)
idea poco elegante:
con ereg_replace sostituisci tutti i tag <a href=""... (che ovviamente devono seguire uno schema) con STARTAG, e tutti gli </a> con ENDTAG
dopo in modo ricorsivo usando strpos e substr estrapoli le etichette e fai il controllo sulla loro lunghezza, eventualmente accorciando e sostituendo
non sarà bello ma funziona (penso)
firefox88
18-09-2005, 09:13
Per rendere i tag HTML inutili e trasformarli in entità HTML la funzione PHP è questa:
string htmlspecialchars ( string string [, int quote_style [, string charset]] )
http://it.php.net/manual/it/function.htmlentities.php
con ereg_replace sostituisci tutti i tag <a href=""... (che ovviamente devono seguire uno schema) con STARTAG, e tutti gli </a> con ENDTAG
Non ho bisogno di sostituire gli <a href...> Devo individuare i link, trasformarli in link cliccabili aggiungendovi <a href...> dopo averli tagliati se più lunghi di 30 caratteri.
Fammi capire...$testo cosa ti ritorna in une esempio tipico di utilizzo ?
firefox88
18-09-2005, 10:03
Fammi capire...$testo cosa ti ritorna in une esempio tipico di utilizzo ?
Non ho capito la domanda. Nel primo post, comunque, è spiegato nel dettaglio tutto quello di cui ho bisogno.
Non ho bisogno di sostituire gli <a href...> Devo individuare i link, trasformarli in link cliccabili aggiungendovi <a href...> dopo averli tagliati se più lunghi di 30 caratteri.
in senso più in generale, io intendevo dire che ti serve individuare dove inizia il tag "a" e dove finisce...per poter isolare l'etichetta e fare quello che vuoi tu...
ereg utilizzando le espressioni regolari lo usi per cercare il pattern <a href="qualsiasicosaquaderntro" alt="qualsiasicosa"> di inizio etichetta
e </a> di fine etichetta.
firefox88
18-09-2005, 18:45
in senso più in generale, io intendevo dire che ti serve individuare dove inizia il tag "a" e dove finisce...per poter isolare l'etichetta e fare quello che vuoi tu...
ereg utilizzando le espressioni regolari lo usi per cercare il pattern <a href="qualsiasicosaquaderntro" alt="qualsiasicosa"> di inizio etichetta
e </a> di fine etichetta.
Bene.
Ma il link <a href="...">...</a> non esiste, pertanto non mi serve individuarlo.
Io voglio che i link inseriti semplicemente come percorsi (quindi senza <a href=...> e perciò NON cliccabili), vengano trasformati in link veri e propri. E questo sono riuscito a farlo. Tuttavia, qualora il percorso del link superasse i 30 caratteri, desidero non renderlo completamente visibile in tutta la sua spropositata lunghezza, troncandolo e aggiungendo tre puntini alla fine. Esattamente come fa questo forum. E questo NON sono riuscito a farlo.
Chiaro?
Se non cercate di capire, è difficile che mi possiate aiutare.
1) Se sono io che non riesco a farmi capire, ditelo e cercherò di spiegarmi meglio.
2) Se invece sono stato io ad avervi frainteso, vi chiedo gentilmente di esprimervi con maggiore chiarezza.
Grazie.
Allora così ?
function crea_link($testo) {
$testo = ereg_replace('http([^\ <>]+)','<a href="http\\1">http\\1</a>',$testo);
$testo = '<a href="$testo">'. substr($testo, 0, 12) .'......'. substr($testo, strlen($testo)-12) .'</a>';
return $testo;
}
firefox88
18-09-2005, 20:46
Elimino il mio post e mi scuso pubblicamente per quanto scritto. Ho avuto una reazione eccessiva.
io starei un pò più calmo ;)
se la gente ti risponde lo fa senza guadagnarci niente e solo per aiutarti.
se poi siamo in 2 ad aver capito male, il dubbio che possa essere tu quello che non si esprime bene non ti sorge?
buon proseguimento
firefox88
18-09-2005, 20:57
Elimino il mio post e mi scuso pubblicamente per quanto scritto. Ho avuto una reazione eccessiva.
Vediamo se qualcuno prima di rispondere si mette a leggere le cose che ho scritto.
Io sono calmissimo. E, proprio perché non ricevete alcun compenso,
il vostro tempo mi sta a cuore e mi dispiace che vada perduto
nel dare delle risposte a vanvera. Una risposta come quella di cionci
è la dimostrazione esemplare del fatto che non ha letto nulla.
E comunque mi sembra di essere stato molto chiaro nell'esporre la questione. E sono stanco di ripeterla.
Ma guarda che presuntuoso... Stai tranquillo che di risposte da me non ne riceverai altre...
Se non ti sai spiegare e non sai leggere (prima inffatti ti avevo chiesto cosa ritornavi in $testo) non è colpa mia...
E' la prima volta in anni di forum che uno mi risponde così... Vai...vai pure in un altro forum...almeno ti levi dalle scatole... Addio :mad:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.