A volte può aversi l’esigenza di dover offrire agli utenti la facoltà di contribuire ai contenuti del sito (ad esempio mediante commenti). In queste circostanze, di solito, viene preclusa la possibilità di inserire codice HTML al fine di ridurre il rischio dello SPAM e, soprattutto, per prevenire situazioni pericolose (come, ad esempio, XSS).
In talune circostanze, tuttavia, è indispensabile offrire all’utente la possibilità di inserire contenuti ipertestuali (è impensabile, ad esempio, un forum in cui agli utenti venisse preclusa la possibilità di inserire link) e quindi diviene indispensabile trovare un sistema alternativo alla mera accettazione del codice HTML. Una soluzione al problema è offerta, senza dubbio, dall’utilizzo del BBCode, un particolare tipo di markup da diversi anni utilizzato nelle principali applicazioni per la gestione di forum (come ad esempio phpBB e VBulletin).
per chi fosse interessato ad introdurre l’utilizzo del BBCode nelle proprie applicazioni segnalo una serie di risorse interessanti che ne facilitano l’integrazione all’interno di progetti in PHP.
Le nostre scelte
Class that parses BBCodes for PHP
Un’interessante classe che offre il supporto al classico markup del BBCode ed offre anche la possibilità di creare dei custom tags.
HTML_BBCodeParser2
Questa classe consente di effettuare con semplicità il parsing del markup BBCode convertendolo in (X)HTML.
NBBC: The New BBCode Parser
Questa classe open source svolge egregiamente il proprio compito di conversione da BBCode a (X)HTML Strict 1.0.
BBCode
Una sofisticata libreria – scritta in PHP – attraverso la quale sarà possibile gestire nelle proprie applicazioni l’integrazione di testo formattato mediante BBCode. Offre un markup particolarmente ricco che comprende, tra gli altri, la possibilità di contrassegnare blocchi di codice ed inserire video di YouTube.
BBCode to HTML
Una semplice, ma utile, funzione in grado di effettuare la conversione da BBCode ad HTML. Peccato non sia presente anche un funzione in grado di svolgere il compito opposto.