Results 1 to 7 of 7

Thread: Gesucht: Verbesserte BB-Codes

  1. #1

    Gesucht: Verbesserte BB-Codes

    Moin
    Da ich gerade mal wieder an meinem tollen Forum arbeitete, stoße ich mal wieder auf das Problem der BB-Codes. Gäbe ja verschiedene Möglichkeiten der Ersetzung.

    1)
    PHP Code:
    $text str_replace ('\[b\]''<strong>'$_POST['text']);
    $text str_replace ('\[/b\]''</strong>'$text); // und so weiter mit den anderen Codes 
    Problem dabei dann: Niemand zwingt den User, den Tag auch wieder zuzumachen, womit sich das auf nachfolgende Schrift auswirken kann. Mögliche Notlösung:
    PHP Code:
    $text .= '</b></i></u>'
    Wobei man allerdings je nach Umfang der BB-Codes einiges zumachen müsste. Gefällt mir nicht.

    2)
    PHP Code:
    $text eregi_replace ('\[b\](.*)\[/b\]''<strong>//1</strong>'$_POST['text']); 
    Problem: Kommt nur klar, wenn in den Posts jeder Tag nur einmal verwendet wird. Sonst kommt was à la
    HTML Code:
    <strong>Hallo![/b] Wie geht's? [b]Mir geht's gut!</strong>
    Was dann auch nicht ganz das Wahre ist.

    3) So hatte ich es mal notdürftig gelöst ...
    PHP Code:
    $text eregi_replace('\[b\](.*)\[b\]''[b]\\1[b2]'$_POST['text']);
    $text eregi_replace('\[/b\](.*)\[/b\]''[/b]\\1[/b2]'$text);
    $text eregi_replace ('\[b\](.*)\[/b\]''<strong>//1</strong>'$_POST['text']);
    $text eregi_replace ('\[b2\](.*)\[/b2\]''<strong>//1</strong>'$_POST['text']); 
    Lässt sich zwar auf beliebig viele erweitern, produziert aber einmal sehr viel Code, und ist außerdem eben auch nicht perfekt. Ich kann mir also die Arbeit machen, und das auf 50 erweitern - wenn wer 51 verwendet, funktioniert's wieder nicht.

    Daher hätte ich nun eben die Frage, wie man das am geschicktesten macht ... ob es eine kleine Erweiterung zu einem der oberen braucht, ob es eine hierfür günstige Alternative zu eregi_replace oder str_replace gibt, ob man um die Notlösung von 1) nicht herum kommt ... ich denke, ihr wisst Bescheid

  2. #2
    Ich würd dafür die BB-Code-Klasse von Christian Seiler benutzen, damit kann man auch verschiedene Tagtypen und ihre Verschachtelung definieren. Ich selber benutz aber für die Seite an der ich gerade arbeite die Version mit str_replace(), weil nur die Admins Zugriff haben und daher niemand absichtlich Tags offen lässt

  3. #3
    Ich würde es (und tu's auch) so machen:
    PHP Code:
    <?php
    $text 
    preg_replace('#\[b\](.*)\[\/b\]#Uis'"<strong>\\1</strong>"$text);
    ?>
    Genau wie Möglichkeit 2, nur dass der Fehler nicht auftritt (informier dich über Perl-kompatible RegExps, wenn du wissen willst, wieso. Ich benutze immer preg und nie ereg!)

    [EDIT]
    Ich verwechsel das immer -.-

    Last edited by dead_orc; 23.02.2005 at 13:03.

  4. #4
    Quote Originally Posted by getöteter_ork
    Ich würds/tus so machen:
    PHP Code:
    <?php
    $text 
    preg_replace('#\[b\](.*)\[\/b\]#Uis'"<strong>\\1</strong>"$text);
    ?>
    Genau wie Möglichkeit 2, nur dass der Fehler nicht auftritt (informier dich über CGI-kompatible RegExps, wenn du wissen willst, wieso. Ich benutze immer preg und nie ereg!)
    Tatsächlich, funktioniert ^^
    Vielen Dank dafür

  5. #5
    Quote Originally Posted by getöteter_ork
    Ich würde es (und tu's auch) so machen:
    PHP Code:
    <?php
    $text 
    preg_replace('#\[b\](.*)\[\/b\]#Uis'"<strong>\\1</strong>"$text);
    ?>
    Genau wie Möglichkeit 2, nur dass der Fehler nicht auftritt (informier dich über CGI-kompatible RegExps, wenn du wissen willst, wieso. Ich benutze immer preg und nie ereg!)
    Perl-kompatible Regexps. CGI != Perl.

  6. #6
    Quote Originally Posted by getöteter_ork
    Ich würde es (und tu's auch) so machen:
    PHP Code:
    <?php
    $text 
    preg_replace('#\[b\](.*)\[\/b\]#Uis'"<strong>\\1</strong>"$text);
    ?>
    Ich war in letzter Zeit auch mit diesem Problem beschäftigt
    Bei dieser Lösung gibt es das Probem, das keine Verschachtelungen möglich sind. Das ist, solange es nur um geht nicht so schlimm, aber was ist, wenn ich Listen oder anderes Verschachteln würde?
    Aus
    Code:
    • Punkt 1
      • Punkt 1.1
      • Punkt 1.2
    • Punkt 2
    würde dann zB
    Code:
    <ul>
    <li>Punkt 1
    
    • <li>Punkt 1.1 <li>Punkt 1.2 </ul> <li>Punkt 2
    Der Rest würde ignoriert...

  7. #7
    Diese Methode funktioniert bei meinem Forum wunderbar:
    PHP Code:
    $text preg_replace("#\[list\]\r\n(.+)\[/list\]#Uis""<ul>\\1</ul>"$text);
    $text preg_replace("#\[list\]\n(.+)\[/list\]#Uis""<ul>\\1</ul>"$text);
    $text preg_replace("#\[list\](.+)\[/list\]#Uis""<ul>\\1</ul>"$text);
    $text preg_replace("#\[\*\](.+)\n#Uis""<li>\\1</li>"$text); 

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •