Ergebnis 1 bis 7 von 7

Thema: 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 -.-

    Geändert von dead_orc (23.02.2005 um 13:03 Uhr)

  4. #4
    Zitat Zitat von 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
    Zitat Zitat von 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
    Zitat Zitat von 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); 

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •