Pagina 1 di 2

Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 19/10/2012, 21:00
da digreo
Compio una query recuperando la variabile "post_text" dalla tabella POSTS_TABLE, trovando il contenuto stringa del primo thread. Il problema è che il BBCode (qualora presente) viene riportato interamente e vorrei poterlo eliminare!

In pratica dovrei eliminare tutto il contenuto da "[" a "]" e da "[/" a "]" compresi questi simboli!
E' possibile?

Codice: Seleziona tutto

$sql = "SELECT post_text FROM ".POSTS_TABLE." WHERE topic_id = $topic_id ORDER BY post_time ASC LIMIT 0,1";
$result = $db->sql_query($sql);
$rows = $db->sql_fetchrow($result);
 $template->assign_block_vars('topicrow', array(
 'POST_TEXT'                 => $rows['post_text']
 ));
Grazie infinite!

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 28/10/2012, 11:09
da Carlo
Da quel che noto, vuoi utilizzare il testo esportato all'interno di una pagina personalizzata di phpBB.

Se vuoi eliminare completamente i BBCode (e non "tradurli"), potresti usare la funzione preg_replace di PHP.

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 29/10/2012, 12:26
da digreo
In verita vorrei cancellare le definizioni all'interno delle parentesi quadre, subito dopo il tag:

Codice: Seleziona tutto

es. [color=#FF0000:u0cf25j6]TESTO[/color:u0cf25j6]
deve diventare [color]TESTO[/color]
Non credo che la funzione da te suggerita possa farlo, ci vorrebbe un indexOf e poi magari la tua funzione! Giusto?

PS. Scusa se non avevo le idee chiare!

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 29/10/2012, 14:22
da Carlo
Quindi vuoi che il BBCode venga proprio convertito in HTML, come avviene sul forum, giusto?

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 29/10/2012, 19:35
da digreo
La funzione è inerente alla visualizzazione del primo post, direttamente sul link del forum, per mezzo della variabile impostata POST_TEXT direttamente nel title del link!
Quindi la presenza del BBCode non deve essere troppo invasiva e anzichè fare in modo che diventi HTML, come tu suggerisci, mi basterebbe eliminare tutto il superfluo, quindi eliminare tutto all'infuori del tag (es. COLOR, URL, QUOTE, LIST, etc.), compresa la chiusura.

In pratica sarebbe da ritracciare tutte quelle lettere che si trovano dopo il simbolo "=" e il simbolo ":" fino alla "]".
In javascript riuscirei a farlo, ma in php sono un niubbo!!

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 29/10/2012, 23:01
da Carlo
Quel lettere di cui tu parli, sono il bitfield, che puoi recuperare sempre dalla tabella dei post. C'è un apposita colonna che contiene quel valore (differente per ogni post).

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 30/10/2012, 11:45
da digreo
Esatto e io vorrei eliminare proprio quelle parti, dopo i simboli = e : fino alla fine della parentesi ]

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 08/11/2012, 17:44
da digreo
UP!

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 08/11/2012, 18:46
da Micogian
Quello che vuoi fare è una cosa abbastanza complicata.
Presumo che tu voglia "tagliare" il testo del post e qui sta il problema, rischi di tagliare un bbcode.
Ne sappiamo qualcosa io ed Angolo quando abbiamo realizzato una Mod che "riduce" il testo dei Feeds.

Prima di tutto devi capire come funziona phpbb, cioè come fa il sistema a prelevare il testo dal database e presentarlo pulito dai tags.
Per questo ti serve dare un'occhiata al questa funzione: https://wiki.phpbb.com/Function.generat ... or_display
Resta sempre il problema della possibilità che il taglio di un testo separi un bbcode. L'uso di preg_replace() può essere utile ma non è semplice.

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Inviato: 10/11/2012, 18:41
da digreo
Questa linea in /includes/message_parser.php scrive nei posts gli smiles:

Codice: Seleziona tutto

$replace[] = '<!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
L'errore pare (ponendosi sul title *vedi dopo) si genera in src="
Il problema potrebbe risiedere dove viene richiamata la funzione nel template title="{topicrow.PST_TEXT}"
E' ovvio che le virgolette generano il problema.

Questo è il primo problema che ho!
Il secondo problema è invece eliminare dai bbcode tutto all'infuori del tag (img, code, etc.); quindi cancellando tutte le parti che iniziano con = e con :

Eventuali risoluzioni ottimali:
Il primo problema posso risolverlo cancellando da <!-- a <!-- fino a --> in pratica tutto il codice della faccina che non mi interessa avere nel template title="{topicrow.PST_TEXT}"

Il secondo problema si può risolvere generando una variabile array che legge da [ ([/) a ] e una variabile array che legge il tag (quindi da [ ([/) a 3), quindi replicare nella variabile $rows.


...Cominciamo dal primo problema! Abbozzo un codice.. fantasioso e privo di conoscenze radicate:

Codice: Seleziona tutto

$sql = "SELECT post_text FROM ".POSTS_TABLE." WHERE topic_id = $topic_id ORDER BY post_time ASC LIMIT 0,1";
$result = $db->sql_query($sql);
//DA QUI CERCO DI ELIMINARE LE PARTI DI TESTO
		while ($roww = $db->sql_fetchrow($result)) {
			while ((strpos($roww['post_text'], "<")!== false) && (strpos($roww['post_text'], ">")!== false)) {
				$rowws[] = $roww['post_text'];
				$sbposx= strpos($roww['post_text'], "<");
				$sbposxx= strpos($roww['post_text'], ">");
				$nmarrow= count($rowws)-1;
				substr($rowws[$nmarrow], $sbposx, $sbposxx - $sbposx);
				str_replace($rowws[$nmarrow], "", $roww['post_text']);
			}
		}
//QUI FINISCO
 $template->assign_block_vars('topicrow', array(
 'POST_TEXT'                 => $roww['post_text']
 ));
Ma naturalmente il codice non sortisce alcun effetto.. se non questo errore in str_replace:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 830 bytes) in /web/htdocs/www.digreo.it/home/board/viewforum.php on line 664