BBCode List

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

  • BBCode List

    Mit dem folgenden Code wandel ich [ list] Tags um. Warum funktioniert der Code nur mit $mystring = " ".$mystring; am Anfang? Warum braucht der das Leerzeichen?
    PHP-Code:
    $mystring $msg;
    $mystring " ".$mystring;

    while (
    strpos($mystring"[list") != false) {
      
    $i strpos($mystring"[list");
      
    $j strpos($mystring"[/list]");
      if (
    $j === false) {
        break;
      }

      if (
    strpos($mystring"[list=") == $i) {
        
    $sourcestring substr($mystring$i$j 6);
        
    $replacestring preg_replace("/\[list=(.*)](.*)\[\/list\]/siU","<ol start=\"\\1\">\\2</ol>"$sourcestring);
        
    $replacestring str_replace("[*]""<li>"$replacestring);        
        
    $mystring str_replace($sourcestring$replacestring$mystring);    
      }
      elseif (
    strpos($mystring"[list]") == $i) {
        
    $sourcestring substr($mystring$i$j 6);
        
    $replacestring preg_replace("/\[list](.*)\[\/list\]/siU","<ul>\\1</ul>"$sourcestring);
        
    $replacestring str_replace("[*]""<li>"$replacestring);        
        
    $mystring str_replace($sourcestring$replacestring$mystring); 
      }

    }

    $msg $mystring

  • #2
    was passiert denn wenn du's wegläßt?
    Darf doch eigentlich nichts ausmachen.

    Kommentar


    • #3
      Nichts! Der BBCode wird unverändert ausgegeben.

      Kommentar


      • #4
        PHP-Code:
        mystring $msg;
        $mystring " ".$mystring;
        while (
        strpos($mystring"[list") !== false) { 
        probier das mal
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          oder versuch die While-Schleife mal so:

          PHP-Code:
          $mystring=$msg;
          while (
          strstr($mystring"[list") == true) { 

          Kommentar


          • #6
            Hm, wenn ich das
            PHP-Code:
            $mystring " ".$mystring
            raus nehme, dann bekomme ich immer den Fehler "Fatal error: Maximum execution time of 5 seconds exceeded...".

            Kommentar


            • #7


              hmm, was steht denn in $msg drin?
              Und was nach der Übergabe in $mystring?

              Hast du das schon ausgegeben?

              Vergiss auch bitte meinen Vorschlag mit strstr(), ist wohl langsamer als strpos()

              Kommentar


              • #8
                Die Übergabe von $msg nach $mystring und später wieder zurück geht, da steht das gleiche drin.
                Da muß also irgendwo in der Schleife (irgendwie ja ne Endlosschleife ohne das Leerzeichen) der Fehler stecken.
                Vielleicht hat auch irgendwer zur Not nen anderen Ansatz (der sogar verschachtelte Listen unterstützt) für die Umwandlung?
                Zuletzt geändert von Tpercon; 15.08.2003, 08:16.

                Kommentar


                • #9
                  Hat keiner 'ne Idee, wo der Fehler liegen könnte?

                  Zur nt weich ich auch auf nen anderen Code aus, der muß dann aber zumindest verschachtelte Listen unterstützen.

                  Kommentar


                  • #10
                    hab's mir mal angeschaut und das Problem liegt bei der Abfrage, d.h. mrhappiness hatte schon recht, als er !== vorgeschlagen hat. Dein Skript hört dann nämlich auf, wenn gleich an erster Position ein list-Tag steht -> da ist strpos davon "0", welches mit !=false verglichen wird. Und 0 ist nicht true, sondern false.
                    also, die Version mit den zwei Gleichheitszeichen benutzen und du kannst den Startstring weglassen. Bei mir hat's zumindest geklappt.

                    Kommentar


                    • #11
                      Hm, seltsam!
                      Ich habe folgenden Code:
                      PHP-Code:
                      $mystring $msg;
                      $mystring " ".$mystring;

                      while (
                      strstr($mystring"[list") !== false) {
                        
                      $i strpos($mystring"[list");
                        
                      $j strpos($mystring"[/list]");
                        if (
                      $j === false) {
                          break;
                        }

                        if (
                      strpos($mystring"[list=") === $i) {
                          
                      $sourcestring substr($mystring$i$j 6);
                          
                      $replacestring preg_replace("/\[list=(.*)](.*)\[\/list\]/siU","<ol start=\"\\1\">\\2</ol>"$sourcestring);
                          
                      $replacestring str_replace("[*]""<li>"$replacestring);        
                          
                      $mystring str_replace($sourcestring$replacestring$mystring);    
                        }
                        elseif (
                      strpos($mystring"[list]") === $i) {
                          
                      $sourcestring substr($mystring$i$j 6);
                          
                      $replacestring preg_replace("/\[list](.*)\[\/list\]/siU","<ul>\\1</ul>"$sourcestring);
                          
                      $replacestring str_replace("[*]""<li>"$replacestring);        
                          
                      $mystring str_replace($sourcestring$replacestring$mystring); 
                        }

                      }
                      //   $mystring = preg_replace("/\[list=(.*)](.*)\[\/list\]/siU","<ol start=\"\\1\">\\2</ol>",$mystring);
                      $msg $mystring
                      Also mit !== und es geht weiterhin nur mit dem Leerzeichen! Auch >= 0 geht nicht ohne.

                      Kommentar


                      • #12
                        ich habe den selben Code und bei mir läuft's bzw. einen Fehler gibt mir PHP zurück und der befindet sich im preg_replace ->
                        du mußt den Slash von Endtag maskieren, da du / als Delimiter für deinen regulären Ausdruck benutzt. also:
                        PHP-Code:
                        preg_replace("/[list=(.*)](.*)[\/list]/siU"... 
                        beim zweiten preg_replace natürlich auch.

                        P.S.: So'n Shit. Schon wieder so ein Beispiel, dass das Forum hier manche Sachen einfach verschluckt. Es soll natürlich "\ / list" heissen. Oder hast du den Backslash bei dir eigentlich auch schon drin?

                        Kommentar


                        • #13
                          @ BrainBug:
                          Ersetz mal bitte das
                          PHP-Code:
                          while (strstr($mystring"[list") !== false) { 
                          durch
                          PHP-Code:
                          while (strpos($mystring"[list") !== false) { 
                          und schau mal ob es so läuft(bei mir halt nicht ). Ich benutze nämlich strpos, hatte es nur oben vergessen zu ändern.

                          PS: $replacestring = preg_replace("/\[list=(.*)](.*)\[\/list\]/siU","<ol start=\"\\1\">\\2</ol>", $sourcestring); Hab den Backslash also drinne.
                          Zuletzt geändert von Tpercon; 18.08.2003, 09:37.

                          Kommentar


                          • #14
                            bei mir läuft's sowohl mit strstr() als auch mit strpos().

                            Hab heute leider nicht viel Zeit und kann dir im Augenblick leider nicht weiterhelfen. Morgen dann...

                            Kommentar


                            • #15
                              Das wäre nett.

                              Vielleicht finde ich ja im Netz auch irgend nen fertigen Code dafür. Wollte es zwar eigentlich selbst machen, aber wenn das so nicht geht...

                              Kommentar

                              Lädt...
                              X