Visualizzazione risultati 1 fino 5 di 5

Discussione: BBCode in php

  1. #1
    Guest

    Predefinito BBCode in php

    Salve a tutti, sto cercando di fare un bbcode in php, ho buttato giù due righe al volo e sono arrivato ad un buon punto
    Codice PHP:
    <?
    function bbcode ($str) {
    $htmltags = array(
    '/\<b\>(.*?)\<\/b\>/is',
    '/\<i\>(.*?)\<\/i\>/is',
    '/\<u\>(.*?)\<\/u\>/is',
    '/\<ul\>(.*?)\<\/ul\>/is',
    '/\<li\>(.*?)\<\/li\>/is',
    '/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
    '/\<div style="text-align:(.*?)"\>(.*?)\<\/div\>/is',
    '/\<br(.*?)\>/is',
    '/\<strong\>(.*?)\<\/strong\>/is',
    '/\<a href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is',
    '/\<a href=\'(.*?)\'(.*?)\>(.*?)\<\/a\>/is',
    );

    $bbtags = array(
    '[b]$1[/b]',
    '[i]$1[/i]',
    '[u]$1[/u]',
    '[list]$1[/list]',
    '[*]$1[/*]',
    '[img]$2[/img]',
    '[$1]$2[/$1]',
    '\n',
    '[b]$1[/b]',
    '[url=$1]$3[/url]',
    '[url=$1]$3[/url]',
    );

    $str = preg_replace ($htmltags, $bbtags, $str);
    $str = nl2br($str);
    return
    $str;
    }

    $str = $_POST[text];
    echo
    bbcode($str);

    ?>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <textarea name=text></textarea>
    <input type="submit" name="submit" value="Vai">
    </form>
    il mio problema è questo: come posso eliminare tutti gli altri tag che non sono presenti nell'array di ricerca ($htmltags)? ad esempio se qualcuno scrive nella textarea l'attributo <table>, l'output mostrerà una tabella...!
    Grazie anticipatamente!
    Ultima modifica di gbtchiaravalle : 03-11-2013 alle ore 13.25.32

  2. #2
    Guest

    Predefinito

    Ciao, in pratica prima di convertire il BBCode devi convertire i caratteri HTML nelle relative identità. Puoi farlo con htmlentities() ;)

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,291

    Predefinito

    Oppure, se vuoi proprio eliminarli come hai chiesto, puoi usare strip_tags().

    Ciao!

  4. #4
    Guest

    Predefinito

    Se uso htmlentities() quando poi estraggo il testo dal db mi compare "<table>che ne so </table>" se invece uso strip_tags() non funziona il capolinea(nl2br($str))...se invece faccio così:

    Codice PHP:
    $consentiti = array('<b>','<li>',...);

    if (
    in_array($da_verificare,$consentiti) )
    {
    //codice
    }
    else
    {
    //elimino questo tag con strip_tags()
    }
    può funzionare? oppure avete una soluzione migliore?

    EDIT: mi sto accorgendo che con questo metodo se scrivo $da_verificare = "<strong>ciao</strong>" mi finisce nell'else invece che nei caratteri consentiti...
    Ultima modifica di gbtchiaravalle : 03-11-2013 alle ore 16.08.31

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,291

    Predefinito

    Prima userei lo strip_tags(), poi nl2br().


    Ciao!
    Ultima modifica di alemoppo : 03-11-2013 alle ore 16.06.23

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •