phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Eliminare BBCode da post_text (POSTS_TABLE)

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 19/10/2012, 21:00

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!

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da Carlo » 28/10/2012, 11:09

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.
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 29/10/2012, 12:26

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!

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da Carlo » 29/10/2012, 14:22

Quindi vuoi che il BBCode venga proprio convertito in HTML, come avviene sul forum, giusto?
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 29/10/2012, 19:35

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!!

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da Carlo » 29/10/2012, 23:01

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).
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 30/10/2012, 11:45

Esatto e io vorrei eliminare proprio quelle parti, dopo i simboli = e : fino alla fine della parentesi ]

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 08/11/2012, 17:44

UP!

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da Micogian » 08/11/2012, 18:46

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.

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Eliminare BBCode da post_text (POSTS_TABLE)

Messaggio da digreo » 10/11/2012, 18:41

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

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 52 ospiti