• Super User

    [Script] Formattazione testo con bbcode.

    Ho fatto un sito con l'inserimento di articoli, molto semplice e ho ovviato alla formattazione del testo tramite il praticissimo bbcode messo a disposizione per noi piccoli webmaster.
    Arrivo al mio problema: la formattazione del testo tramite bbcode avviene in modo esatto, tranne per i
    Eccovene un esempio:
    http://www.immigrazione.biz/circolare1.html

    Ed ecco il bbcode.php da me usato:

    <?php
    //Funzione per interpretare il testo
    function fBBCode($string)
    {
    //No HTML
    $string = trim(str_replace("<", "<", $string));
    $string = trim(str_replace(">", ">", $string));

    //CHR 13
    $string = trim(str_replace(chr(13), ";", $string));
    $string = trim(str_replace(";", "", $string));
    
    //BBCODE
    $string = trim(str_replace("**", "<b>", $string));
    $string = trim(str_replace("**", "</b>", $string));
    $string = trim(str_replace("", "<i>", $string));
    $string = trim(str_replace("", "</i>", $string));
    $string = trim(str_replace("[S]", "<u>", $string));
    $string = trim(str_replace("[/S]", "</u>", $string));
    $string = trim(str_replace("", "<hr>", $string));
    $string = trim(str_replace("*", "<li>", $string));
    $string = trim(str_replace("[IMAGE=", "<img border='0' src='", $string));
    $string = trim(str_replace("[url=", "<a href='", $string));
    $string = trim(str_replace("", "</a>", $string));
    $string = trim(str_replace("[LEFT]", "<div align='left'>", $string));
    $string = trim(str_replace("[CENTER]", "<div align='center'>", $string));
    $string = trim(str_replace("[RIGHT]", "<div align='right'>", $string));
    $string = trim(str_replace("[/LEFT]", "</div>", $string));
    $string = trim(str_replace("[/CENTER]", "</div>", $string));
    $string = trim(str_replace("[/RIGHT]", "</div>", $string));
    $string = trim(str_replace("", "</font>", $string));
    $string = trim(str_replace("]", "'>", $string));
    
    //Ritorno il valore
    return $string;
    

    }
    ?>
    Qualche suggerimento per piacere?
    Sinceramente non capisco il perchè. Grazie a tutti per chi mi volesse aiutare :ciauz:

    Ho appena risolto. Grazie lo stesso. PS = ecco la soluzione.
    Ho aggiunto $string = trim(str_replace("", "<br>", $string));
    $string = trim(str_replace("[/BR]", "</br>", $string));

    al bbcode.php


  • Bannato User Attivo

    Sei sicuro che per gli URL funzioni bene? Quelli del tipo {URL}http:etc{/URL}
    Non li consideri quelli?


  • User Attivo

    Ciao Stable,
    credo che il BBcode è utile al fine di non creare errori nella pagina.

    La funzione che leggo somiglia ad una gia presente in php, e nel tuo caso sarebbe più semplice fare così:

    strip_tags($string, '<b><i><u><hr><br><br/><li><a><img><div><font>');

    Questo limita l'uso di html ai soli tag specificati tra virgolette, ma ovviamente bisogna scrivere gli articoli in html.....

    Se si vuole proprio far uso del BBcode, sfruttiamolo a dovere....

    Se in un articolo si apre un div senza chiuderlo..................................tutto il lavoro del webmaster va a farsi friggere.

    Io consiglio questo per "tradurre" il BBcode:

    [php] function bbcode_format($var) {
    $search = array(
    '/[b](.?)[/b]/is',
    '/[i](.
    ?)[/i]/is',
    '/[u](.?)[/u]/is',
    '/[img](.
    ?)[/img]/is',
    '/[url](.?)[/url]/is',
    '/[url=(.
    ?)](.*?)[/url]/is'
    );
    $replace = array(
    '<strong>$1</strong>',
    '<em>$1</em>',
    '<u>$1</u>',
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<a href="$1">$2</a>'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }[/php]Questa funzione traduce i tag BBcode in coppia, solo se prima aperti e poi chiusi, utilizza le espressioni regolari, ma anche se non si è pratici basta copiare quello che già c'è per aggiungere altri tag.

    :ciauz: Ciao.


  • ModSenior

    Per quanto riguarda la funzione per trasformare i bbcode per poter funzionare in modo ricorsivo, ad esempio un sistema quote dove si può verificare il quote del quote, bisogna fare cosi:
    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.?)[/url]/is",
    "/[url=(.
    ?)](.*?)[/url]/is"
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<a href="$1">$1</a>'
    );

     while(preg_match("#[quote](.*?)[\/quote]#is", $var)!=0)
         $var = preg_replace("#[quote](.*?)[\/quote]#is", '<table border="1"><tr><td>$1</td></tr></table>', $var);
     $var = preg_replace($search, $replace, $var);
     return $var;
    

    }
    [/php]


  • User

    Io ho tutti i tag cosi:
    [b:sk07ho8k]testo[/b:sk07ho8k]

    come posso risolverlo?
    Grazie


  • User Newbie

    [PHP]
    function bbcode_ritorno($var) {
    $search = array(
    "#<strong>(.?)</strong>#",
    "#<em>(.
    ?)</em>#",
    "#<u>(.?)</u>#",
    '#<img src="(.
    ?)" />#',
    '#<a href="(.?)">(.?)</a>#',
    '#<a href="(.?)">(.?)</a>#'

         );
     $replace = array(
         '**$1**',
         "*$1*",
         "*$1*",
         '![image]($1)',
         '[url=$1]$2',
         '[url=$1]$2'
    
         );
        
     while(preg_match('#<table border="1">(.*?)</table>#is', $var)!=0)
         $var = preg_replace('#<table border="1"><tr><td>(.*?)</td></tr></table>#is', '> $1', $var);
     $var = preg_replace( $search, $replace, $var);
     return $var;
    

    }

    [/PHP]

    Provato e testato, questa funzione è l'inverso di quella proposta da Thedarkita!
    Potrebbe sempre servire... 😄