PDA

View Full Version : [PHP] Quote con preg_replace


ianaz
07-09-2006, 09:48
Ho in progetto un piccolo forum ed ho trovato un intoppo con il quote...

(il mio quote é in formato quote[testo]quote tanto per fare un po' diversamente :))

$testo = htmlspecialchars($testo);
$testo = nl2br($testo);
$testo = preg_replace("/quote=(.*?)\[(.*?)\]quote/", "<div style=\"margin: 10px 20px 5px;\">\n<div style=\"margin-bottom: 2px;\"><font size=\"1\"><b>\\1 ha scritto: </b></font></div>\n<div style=\"border: 1px inset ; margin: 0px; padding: 6px; height: 34px; overflow: auto; background-color:#CDCDCD;\">\n\\2\n</div>\n</div>", $testo);



se un utente mi va a capo nel quote nel textarea prima di inviare(non con un br) poi la funzione non funge...

In parole povere:

quote[ciao]quote funziona

quote[Salve,
io sono nuovo]quote non funziona, restituisce il codice così com'é, quindi:

quote[Salve,
io sono nuovo]quote




:)

ciao ianaz

andbin
07-09-2006, 10:24
Metti questo pattern:
"/quote(?:=(.*?))?\\[(.*?)\\]quote/s"La 's' finale serve per matchare anche i newline. Inoltre ho raggruppato =(.*?) in modo che potesse esserci oppure no (tu puoi fare quote[aaa]quote ma anche quote=Andrea[aaa]quote.

ianaz
07-09-2006, 10:25
Metti questo pattern:
"/quote(?:=(.*?))?\\[(.*?)\\]quote/s"La 's' finale serve per matchare anche i newline. Inoltre ho raggruppato =(.*?) in modo che potesse esserci oppure no (tu puoi fare quote[aaa]quote ma anche quote=Andrea[aaa]quote.
Grazie mille per l'aiuto. andbin sempre veloce :)

ianaz
07-09-2006, 10:28
E se ci sono quote nei quote?!

Mi quota solamente la prima... :(

esattamente così:


prova

prova quote
quote=ianaz[yoyo ianaz dragone

andbin
07-09-2006, 10:45
E se ci sono quote nei quote?!Bella domanda!!!
Con una unica regex, credo che non si possa fare. :stordita:

E se lo facessi con 2 regex??? Una per matchare e sostituire l'inizio quote=aaa[ e l'altra per la fine ]quote ???

ianaz
07-09-2006, 10:47
Bella domanda!!!
Con una unica regex, credo che non si possa fare. :stordita:

E se lo facessi con 2 regex??? Una per matchare e sostituire l'inizio quote=aaa[ e l'altra per la fine ]quote ???
e se poi uno non me lo chiude....mi fa un div enorme :p...

dierre
07-09-2006, 12:54
guarda...ora come ora non posso controllartelo, ma forum tipo phpbb non fanno come fai tu, esaminano tag per tag separatamente. Cioè se hai [-quote] [/-quote] gli passa tutto il testo, la prima volta sostituisce il codice per l'apertura a tutte le tag e la seconda volta tutte le chiusure.

esempio stupido:

[-quote]ciao[-quote]come va?[/-quote][/-quote]

diventa così:

<div>ciao<div>come va?[/-quote][/-quote]

e poi:

<div>ciao<div>come va?</div></div>

e se poi uno non me lo chiude....mi fa un div enorme :p...

Ovviamente sta a chi crea il tema prevedere che il div preposto per i quote non possa far danni. Oppure puoi metterci un check che se esiste una tag di apertura e non ne trova una di chiusura, chiude alla fine lo stesso.

ianaz
07-09-2006, 14:46
ho fatto con i due regex....
grazie a tutti :)