Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML Tags schließen?

Einklappen

Neue Werbung 2019

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

  • HTML Tags schließen?

    Moin moin!

    ich bin grade dabei eine kommentarbox zu bauen.
    ich bin auch schon sehr weit. es gibt nur noch etwas das mich stört:
    und zwar ist es möglich durch die BBcodes die nachfolgenden kommentare zu ändern.
    normale HTML tags werdenn druch den striptags(); befehl entfernt, aber ich wandel die bbcodes "" in => "<b></b>" um. daher ist es noch möglich mit:
    [b] ohne schließendes element die anchfolgenden texte zu beeinflussen.
    das sieht dann so aus:

    Textfeld vor dem fehler:


    Textfeld nach dem fehler:


    was mir aufgefallen ist, ist das inhalte anderer <div> nicht beeinflusst werden. aber jetzt alle anderen texte in eigene divs zu stopfen wäre irgendwie unschön weil die HTML tags trozdem offen wären.

    gibt es eine möglichkeit wie ich diese HTML tags schließen könnte?
    ich will nicht grade hinter jeden kommentar 100x "</b>" schreiben nur um sicher zu gehen das niemand da zu viele "[b]" geschrieben hat


  • #2
    Naja irgendwo wirst du ja [b] in <b> umwandeln. Dort musst du eben nur dann die Werte ersetzen wenn immer ein schließender Tag vorhanden ist. BBCode Parser gibt es aber schon genug. Einfach mal suchen und schauen wie die es erledigen.

    Kommentar


    • #3
      wie könnte man sowas anstellen?
      mein code sieht so aus:
      PHP-Code:
              $replace         = array(        "[b]"           => "<b>",
                                               
      "[/b]"          => "</b>",
                                               
      "[i]"           => "<i>",
                                               
      "[/i]"          => "</i>",
                                               
      "[u]"           => "<u>",
                                               
      "[/u]"          => "</u>"
                                       
      );

              echo 
      strtr($comm_part[2],$replace); 
      muss ich da vlt sowas wie "$bzähler++;" einbauen um rauszukriegen wie viele geöffnet wurden, und wie viele geschlossen wurden um die fehlenden schließer am ende zu ergänzen?

      ich versuch immer gerne alles selbst zu machen, aber dann frag ich mich auch immer ob das nicht anders leichter, und weniger rechenlastig geht.
      ich möchte ja ein schönes ergebniss, daran lernen, ohne den server dauerhaft zu fordern.

      Kommentar


      • #4
        Und deswegen sollst du dir bestehende Lösungen anschauen. Such dir 2-3 BBCode parser raus und schau wie die es umgesetzt haben. Mit dem Zähler wäre schon mal eine Möglichkeit.

        Kommentar


        • #5
          Sieh dir mal den letzten Parameter an

          PHP: str_replace - Manual

          So kannst du die Differenz zwischen Start- und Endtags berechnen. Das ganze in einer Schleife für jeden Tag und du hast was du willst.
          You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

          Kommentar


          • #6
            Mach es einfach mit preg_replace und wenn dann noch Tags übrig sind dann haust du die raus ...
            "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

            Kommentar


            • #7
              soo

              ich hab mir jetzt eine schöne lösung überlegt. ich dachte mir vlt steht jemand vo einem ähnlichem problem und könnte dabei hilfe gebrauchen.

              das diese funktion zählt in einem string die anzahl von parameter 1 und die anzahl von parameter 2. ist parameter 1 größer wird parameter 2 so oft an das ende des strings gehängt bis beide gleichoft vorhanden sind.
              beispiel:
              $string = "[b] [b] [b] blubb keks"
              nach nutzen der funktion ist der $string:
              $string = " blubb keks "

              viel spaß damit

              PHP-Code:
                       function closetag($data$tagopen$tagclose)
                       {
                               
              $open                   substr_count($data$tagopen);
                               
              $close                  substr_count($data$tagclose);
                               if(
              $open $close)
                               {
                                       
              $toclose        $open $close;
                                       
              $tagcount       0;
                                       while(
              $tagcount $toclose)
                                       {
                                               
              $tags $tags."$tagclose";
                                               
              $tagcount++;
                                       }
                               }
                               
              $GLOBALS["convertet_text"] = $data.$tags;
                       }

                       
              $convertet_text nl2br(strip_tags($_POST['content'], "$allowtag") );
                       
              closetag($convertet_text"[b]""[/b]");
                       
              closetag($convertet_text"[i]""[/i]");
                       
              closetag($convertet_text"[u]""[/u]");
                       
              closetag($convertet_text"[color=""[/color]"); 

              Kommentar


              • #8
                mit RegExp geht das super.
                Code:
                /\[b\](.*)\[\/b\]/s
                Code:
                <b>\1</b>
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  stimmt...
                  nja aber jetzt hab ich meine lösung

                  Kommentar


                  • #10
                    Kleine Anmerkung:

                    Zitat von tkausl Beitrag anzeigen
                    mit RegExp geht das super.
                    PHP-Code:
                    <?php

                    echo preg_replace('/\[b\](.*)\[\/b\]/s',
                                      
                    '<b>\1</b>',
                                      
                    '[b]Dies[/b] ist ein [b]Test[/b]');

                    // <b>Dies[/b] ist ein [b]Test</b>
                    Der Ausdruck müsste ungreedy sein: /\[b\](.*?)\[\/b\]/s

                    Problem ist immer: Was passiert mit BBCode-Tags in [code]-Tags oder [noparse]-Tags? Dem ist mit simplen Ersetzungen soweit ich weiß nicht so recht beizukommen.

                    Edit: Weil ich's gerade sehe: http://www.php.de/php-einsteiger/668...mbruechen.html (anderer Thread zum Thema)

                    Kommentar


                    • #11
                      Zitat von mermshaus Beitrag anzeigen
                      Kleine Anmerkung:



                      PHP-Code:
                      <?php

                      echo preg_replace('/\[b\](.*)\[\/b\]/s',
                                        
                      '<b>\1</b>',
                                        
                      '[b]Dies[/b] ist ein [b]Test[/b]');

                      // <b>Dies[/b] ist ein [b]Test</b>
                      Der Ausdruck müsste ungreedy sein: /\[b\](.*?)\[\/b\]/s

                      Problem ist immer: Was passiert mit BBCode-Tags in [code]-Tags oder [noparse]-Tags? Dem ist mit simplen Ersetzungen soweit ich weiß nicht so recht beizukommen.
                      Nungut, muss zugeben hab das nur auf die schnelle hingebastelt und weiß auch nicht wie das mit den verschachtelten codes ist.
                      habe es mir so gedacht, dass das erste öffnende nicht das erste schließende findet, sondern halt das letzte. gehört wohl doch mehr zu...
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar

                      Lädt...
                      X