PDA

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 :(

Gremo
17-09-2005, 03:09
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.

Gremo
17-09-2005, 09:05
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 :)

Gremo
17-09-2005, 09:45
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.

cionci
18-09-2005, 09:28
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.

Gremo
18-09-2005, 18:33
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.

cionci
18-09-2005, 20:18
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.

Gremo
18-09-2005, 20:53
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.

cionci
18-09-2005, 23:22
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:

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.