Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Gestione bbcode

  1. #1

    Gestione bbcode

    salve.

    come tanti ho il problema della gestione del bbcode.
    uso queste funzioni per passare da bbcode a html (per l'inserimento nel database) e da html a bbcode (per il reinserimento nei campi textarea per l'edit dei dati del database)

    codice:
    function format($textarea){
    $textarea = trim($textarea);
    $textarea = stripslashes($textarea);
    $textarea = htmlentities($textarea);
    $textarea = nl2br($textarea);
    $textarea = ereg_replace("\[B\]","",$textarea);
    $textarea = ereg_replace("\[/B\]","",$textarea);
    $textarea = ereg_replace("\[I\]","",$textarea);
    $textarea = ereg_replace("\[/I\]","",$textarea);
    $textarea = ereg_replace("\[U\]","<u>",$textarea);
    $textarea = ereg_replace("\[/U\]","</u>",$textarea);
    $textarea = preg_replace("#\[ url = ([^\]]+)\]#i", "<a href=\"\\1\" target=\"_blank\">", $textarea);
    $textarea = preg_replace("#\[/url\]#i", "</a>", $textarea); 
    $textarea = preg_replace( "#\[img\](.+?)\[/img\]#si", "<img src=\"\\1\">", $textarea);
    return $textarea;
    }
    
    
    function re_format($textarea){
    
    $textarea = ereg_replace("\
    ","\n",$textarea);
    $textarea = ereg_replace("\","[B\]",$textarea);
    $textarea = ereg_replace("\","[/B\]",$textarea);
    $textarea = ereg_replace("\","[I\]",$textarea);
    $textarea = ereg_replace("\","[/I\]",$textarea);
    $textarea = ereg_replace("\<u>","[U\]",$textarea);
    $textarea = ereg_replace("\</u>","[/U\]",$textarea);
    $textarea = preg_replace("#\<a href=\"([^\]]+)\" target=\"_blank\">#i", "[ url= \\1]", $textarea);
    $textarea = preg_replace("#\</a>#i", "[/url]", $textarea); 
    $textarea = preg_replace( "#\<img src=\"(.+?)\">#si", "[img]\\1\[/img]", $textarea);
    
    return $textarea;
    }
    le due funzioni grossomodo fanno il loro dovere. nn ho fatto tutti i test del caso, ma per i casi generali dovrebbero andare.
    il problema rimane sempre lo stesso.
    se qualcuno nn chiude un tag ? come posso far in modo che i tag vengano interpretati solo se correttamente chiusi (e magari, se nn chiusi, interpretarli come testo normale... come accade in questo forum )?

    ho fatto una ricerca veloce, e ho notato che vi sono tante discussioni a riguardo, ma nessuna (almeno, io non ne ho trovato nessuna) con una risposta

    qualcuno che mi possa aiutare ?

    thx, kicko

  2. #2
    bella storia.. l'unica cosa che farei è un doppio replace

    $textarea = ereg_replace("\B\]","\[B\]",$textarea);
    $textarea = ereg_replace("\[B\","\[B\]",$textarea);

    e poi $textarea = ereg_replace("\[B\]","[b]",$textarea);

    ma poi non è neanche detto, perchè se li dimentica entrambi sono problemi.. perchè di certo nn puoi fare:

    $textarea = ereg_replace("B","\[B\]",$textarea);

    altrimenti ogni "B" nel testo viene convertita..

    cmq, capita in tanti casi? io ho usato una cosa simile per un portale che pesca i thread da un cms, e devo dire che è sempre funzionato bene..


  3. #3
    no boh... nn è una questione di frequenza ... è un fatto di perfezione .. purtroppo a qualcuno capita di non chiudere correttamente i tag, ed è una variabile che va considerata e quindi si cerca di risolverla ... tutto qua ...

    qualcuno che ci sia riuscito nn c'è ?

  4. #4
    Sono 20.40 e la mia pizza non è ancora arrivata... ma la butto lì... hai provato a guardare che fa PHPBB? Magari puoi prendere uno spunto da lì... ora che ci penso dovrei trovare una soluzione per questo problema anche io
    Cambia il mondo, prima che il mondo ti cambi...

    golbez

  5. #5
    ma phpbb nn gestisce perfettamente i tag .. alemno, così mi pare di ricordare ...
    secondo me si dovrebbe cercare come li gestisce vbull, ma è a pagamento :/

  6. #6
    Boh... io ricordo che chiudeva tutto... Se non ricordo male, esiste una versione di VB di prova... mi sembra... Prova con invision ... non lo so


    Ad ogni modo, è strano che il 80% del nostro tempo passiamo il tempo a risolvere i problemi che possono creare gli altri

    [B]Faccio una prova

    Interessante.. se non metti l'altro tag non te lo codifica

    [U] vedi? O.o
    Cambia il mondo, prima che il mondo ti cambi...

    golbez

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Non ho mai risolto un problema del genere però verificando che il numero dei tag aperti coincida con quello dei tag chiusi intanto potresti sapere se i tag sono stati chiusi correttamente ed eventualmente richiamare l'attenzione dell'utente.
    Non è una genialata ma già una soluzione.

  8. #8
    TRATTO DA http://www.phpit.net/article/create-bbcode-php/

    Codice PHP:

    function bbcode_format ($str) {
            
    $str htmlentities($str);

            
    $simple_search = array(
                                    
    '/\[b\](.*?)\[\/b\]/is',                               
                                    
    '/\[i\](.*?)\[\/i\]/is',                               
                                    
    '/\[u\](.*?)\[\/u\]/is'
                                    
    );

            
    $simple_replace = array(
                                    
    '[b]$1[/b]',
                                    
    '[i]$1[/i]',
                                    
    '<u>$1</u>'
                                    
    );

            
    // Do simple BBCode's
            
    $str preg_replace ($simple_search$simple_replace$str);

            return 
    $str;


    E pacco... mi cambia le stringhe..

    Voglio fare l'amore con google
    Cambia il mondo, prima che il mondo ti cambi...

    golbez

  9. #9
    spettacolo ... funziona alla grande

    thx 1000 GoLBeZ

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.