BB-Code Selber machen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • BB-Code Selber machen

    Hallo,

    Ich möchte mir gerne einen eigenen BB-Code zusammenbasteln, dabei treten nun folgende Probleme auf:

    1. Wenn ich die Zeilenumbrüche mit nl2br umwandle funktioniert die replace-funktion nicht mehr. (wandel ich das ganze allerdings mit str_replace um gehts)

    2. Es sind keine BB-Codes in anderen BB-Codes möglich.

    Der Code

    Quellcode

    1. <?
    2. //Str zum Testen definieren
    3. $str = "[u]Hallo<br \>\nHallo[/u]";
    4. //Unnötge Leerzeichen an Anfang und Ende Weg
    5. $str = trim($str);
    6. //\n und <br \> umwandeln für Texte aus der DB
    7. $str = nl2br($str);
    8. //Auch Umwandeln allerdings anders
    9. //$pattern = "/\\n/";
    10. //$str = preg_replace($pattern, '<br />', $str);
    11. //BB-Codes b,u,i
    12. $pattern = "#\[(b|u|i)\](.*)[<br \>]?\[/(\\1)\]#";
    13. $str = preg_replace($pattern, '<$1>$2</$1>', $str);
    14. //BB-Code url
    15. $pattern = "#\[url=(.*)\](.*)\[/url?]#";
    16. $str = preg_replace($pattern, '<a href=\'$1\'>$2</a>', $str);
    17. //BB Code color
    18. $pattern = "#\[color=(.*)\](.*)\[/color?]#";
    19. $str = preg_replace($pattern, '<font color=\'$1\'>$2</font>', $str);
    20. //Ausgabe
    21. echo $str;
    22. ?>
    Alles anzeigen
  • Hi,

    erstmal eine kurze Frage: Willst du eine fertige Lösung vermeiden?
    Es gibt schließlich PHP Klassen für BBCodes - die sparen viel Arbeit.

    Du musst dir keine Gedanken um Cross Site Scripting (bei dir vermutlich möglich) kümmern, bekommst auch bbcodes in bbcodes hin (bei dir vermutlich nicht möglich), uvm.
    Es gibt auch schon ein paar Threads zum Thema BBCode hier im Forum. Zum Beispiel hier: BBCODE

    Ohne nl2br klappt dein Code übrigens auch nicht.

    Quellcode

    1. // $str = nl2br($str);


    Willst du wirklich noch das eigentlich Problem lösen? Dann müssen wir uns die Regex mal anschauen. Ich glaube es fehlt ein Regex Modifier. S, s, u oder U.
  • erstmal eine kurze Frage: Willst du eine fertige Lösung vermeiden?
    Es gibt schließlich PHP Klassen für BBCodes - die sparen viel Arbeit.


    Ja, ich möchte das Ding komplett selber machen. Ich nutze prinzipiell keine fertigen Sachen, hat man nur Ärger mit. Die Arbeit nehme ich gerne in kauf.


    Ohne nl2br klappt dein Code übrigens auch nicht.


    Das weiß ich. Hilft mir allerdings nicht wirklich weiter.



    Willst du wirklich noch das eigentlich Problem lösen? Dann müssen wir uns die Regex mal anschauen. Ich glaube es fehlt ein Regex Modifier. S, s, u oder U.

    Ja Modifier S würde ich denken:

    Modifier s (dot all)

    Normalerweise trifft der Punkt nicht auf Zeilenumbrüche zu. Mit diesem Schalter werden mit dem Punkt auch Zeilenumbrüche erkannt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Knud ()