BBcode-logik-problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • BBcode-logik-problem

    Hallo,
    habe mir mal selbst einen BBcode gebaut, der auch soweit funktioniert!

    Hier mal ein Teil von meinem Script:
    PHP-Code:
    function bbcode($text) {
    $text=eregi_replace("\[fett\]([^\[]+)\[/fett\]","<b>\\1</b>",$text);
    $text=eregi_replace("\[LEFT\]([^\[]+)\[/LEFT\]","<div align=\"left\">\\1</div>",$text);

    return 
    $text;

    Mein Problem:
    Wenn ich jetzt z.B.
    Code:
    [LEFT][fett] test [/fett][/LEFT]
    Dann wird "test" linksbündig gesetzt aber nicht fett gedruckt. Das wird dann so ausgegeben:
    Code:
    [fett]test[/fett]
    Der Text ist dann linksbündig gesetzt, aber halt nich fett gedruckt.

    Wie stelle ich das an, dass 2 oder mehrere Codes umgewandelt werden?

  • #2
    vielleicht solltest du in dem Regex nicht jegliche eckigen Klammern verbieten?!

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Ich stehe grade aufm schlauch!
      Wie muss ich es ändern?

      Kommentar


      • #4
        Re: BBcode-logik-problem

        Na du triffst mit der Char-Class in der Mitte alle Zeichen außer [ und ] und gerade die musst du doch auch treffen, wenn du mehrere verschachtelte Tags ersetzen willst!

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Du brauchst das Fragezeichen ? um die Greediness(Gierigkeit) von max auf min zusetzen. Dann kannst du deine [ ]- Beschränkung weglassen.


          ([^[]+) --> (.*?)
          Team BashComp

          Kommentar


          • #6
            Original geschrieben von mnhg
            Du brauchst das Fragezeichen ? um die Greediness(Gierigkeit) von max auf min zusetzen. Dann kannst du deine [ ]- Beschränkung weglassen.


            ([^[]+) --> (.*?)
            Wenn ich (.*?) einsetze dann bekomme nen error!
            Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in C:\Programme\xampp\htdocs\xampp\include\function.php on line 12

            Kommentar


            • #7
              dann zeig mal aktuellen code.

              ich würde zudem preg_replace bevorzugen.

              oder gleich die fertige BBCoder Klasse vom Seiler...

              Kommentar


              • #8
                Hier:

                PHP-Code:
                function bbcode($text) {
                $text=eregi_replace("\[FETT\](.*?)\[/FETT\]","<b>\\1</b>",$text);
                $text=eregi_replace("\[LEFT\](.*?)\[/LEFT\]","<div align=\"left\">\\1</div>",$text);    
                   return 
                $text;

                Kommentar


                • #9
                  Das hab ich vergessen zu erwähnen. Das ist ein preg-Ausdruck. ereg würde ich mir an deiner Stelle gleich wieder abgewöhnen.
                  Team BashComp

                  Kommentar


                  • #10
                    Also jetzt versteh ich gar nichts mehr. Habs mal jetzt mit preg_replace(); gemacht:


                    PHP-Code:
                    function bbcode($text) {
                    $text=preg_replace("\[FETT\](.*?)\[/FETT\]","<b>\\1</b>",$text);
                    $text=preg_replace("\[LEFT\]([.*?)\[/LEFT\]","<div align=\"left\">\\1</div>",$text);    
                       return 
                    $text;


                    Jetzt bekomme ich diese Fehlermeldung:

                    Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in

                    Kommentar


                    • #11
                      Dann informier dich bitte über Delimiter, die du zur zeit nicht nutzt.

                      Kommentar


                      • #12
                        Nimm erstmal das eine [ aus der zweiten Zeile weg. Und dann setzt z.B. ein @ an denn Anfang und das Ende der RegEx. Wenn es dann läuft googlest du nach "preg tutorial" und machst dir klar warum es läuft.
                        Team BashComp

                        Kommentar


                        • #13
                          warum nicht einfach sowas:
                          preg_replace("/\[(\/?)FETT\]/", "<$1b>");

                          Kommentar


                          • #14
                            Kommt darauf an wo man es einsetzen will. In nem Forum wäre es leichtsinnig. Wenn man den BBCode nur selber nutzt dann geht's. Das Problem ist, dass du damit sehr schnell invaliden Code erzeugst, wenn ein User mal das Schließen eines Tags vergisst. Dann müsstest du irgendwie zählen wieviel du auf machts und dann auch wieder zu.

                            MfG
                            mnhg
                            Team BashComp

                            Kommentar


                            • #15
                              Also erst mal vielen Dank für eure Hilfe!!

                              Original geschrieben von mnhg
                              Kommt darauf an wo man es einsetzen will. In nem Forum wäre es leichtsinnig. Wenn man den BBCode nur selber nutzt dann geht's. Das Problem ist, dass du damit sehr schnell invaliden Code erzeugst, wenn ein User mal das Schließen eines Tags vergisst. Dann müsstest du irgendwie zählen wieviel du auf machts und dann auch wieder zu.

                              MfG
                              mnhg
                              Das war meine nächste Sorge. Möchte den BBcode nämlich in meinem Forum und natürlich auch im Adminbereich benutzen. Ich habe mich bisher nie sehr mit RegExp beschäftigt! Ich denke, dass ich meinen BBcode jetzt erst mal in der Form, wie ich ihn in meinem 1. Post geschrieben habe, lassen. Es lassen sich dann zwar nicht mehr Verschachtelungen ausführen, aber immerhin funktioniert der Code an sich!

                              Kommentar

                              Lädt...
                              X