[REGEX] String mit BBcode kürzen

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

  • [REGEX] String mit BBcode kürzen

    ich brauche eine funktion, die einen string nach einer bestimmten anzahl von zeichen abschneidet. die funktion soll dabei aber:
    - nur nach ganzen wörtern schneiden
    - und evtl. nach dem schnitt vorhandenen schließenden bbcode erhalten und an den geschnittenen string wieder anhängen (damit nicht tags geöffnet und nicht wieder geschlossen werden)

    (der bbcode ist mit einer id markiert [b:die_id]text[/b:die_id], phpbb-style)

    also aus "[b:wafasa54]das ist ein teststring mit viel text[/b:wafasa54]" sollte also werden "[b:wafasa54]das ist ein[/b:wafasa54]"

    ich hab das jetzt versucht umzusetzen, aber irgendwo ist da der wurm drin...
    der regepx macht zusammen mit preg_match_all nicht dass, was ich erwarten würde (da hab ich wahrscheinlich die funktion nicht verstanden...)

    kann mir bitte jemand helfen

    PHP-Code:
    // $string soll so gekürzt werden, dass er maximal $chars zeichen lang ist
    function cut_words_string2($string$chars$bbuid '')
    {
        if ( 
    strlen($string) > $chars )
        {
            
    $bbcodes = array();
            
            
    $words explode(' '$string);
            
            
    $i 0;
            
    $string '';

            while( (
    strlen($words[$i]) + strlen($string) + 1) <= $chars )
            {
                
    $string .= $words[$i] . ' ';
                
    $i++;
            }
            
    $scrap '';
            for(
    $i$i <= count($words); $i++)
            {
                
    $scrap .= $words[$i];
            }
            
    preg_match_all("/\[\/.+:$bbuid.+\]/"$scrap$bbcodes);
            return 
    $string implode(''$bbcodes);
        }
    }

    $string "&lt;i&gt;HTML? sollte nicht kursiv sein&lt;/i&gt;
    [i:50e41e5f96][b:50e41e5f96]bbcode[/b:50e41e5f96] sollte kursiv sein[/i:50e41e5f96]
     :roll:"
    ;
    echo 
    cut_words_string2($string10'50e41e5f96'); 
    führt zu
    Array()
    Zuletzt geändert von QCO; 05.06.2003, 11:59.
    [color=#FF6C00]Da werden Sie nicht geholfen.[/color] --> [[color=#292626]httpsmog[/color]] <!-- [color=#FF6C00]Da werden Sie nicht geholfen.[/color]

    [color=#292626]"I have not failed. I've just found 10,000 ways that won't work." [/color] - Thomas Alva Edison (1847-1931)

  • #2
    dann ist es wohl ein array und muss dementstprechend ausgegeben werden.

    Kommentar


    • #3
      ja, es ist ein array...
      aber das sollte eigentlich mittels implode() abgehandelt werden.
      wenn ich jetzt mal
      PHP-Code:
      print_r($bbcodes); 
      mache, bekomme ich folgendes
      Array ( [0] => Array ( [0] => [/b:50e41e5f96]solltekursivsein[/i:50e41e5f96] ) )
      warum ist das zweidimensional? und vor allem... wieso steht da nicht das drin, was ich mit meinem regexp suche?

      kann ja eigentlich nur daran liegen, dass der regexp falsch ist, aber ich weiß nicht wo...
      [color=#FF6C00]Da werden Sie nicht geholfen.[/color] --> [[color=#292626]httpsmog[/color]] <!-- [color=#FF6C00]Da werden Sie nicht geholfen.[/color]

      [color=#292626]"I have not failed. I've just found 10,000 ways that won't work." [/color] - Thomas Alva Edison (1847-1931)

      Kommentar


      • #4
        was ist das für eine funktion:

        cut_words_string2

        Zuletzt geändert von invitatoinvitat; 05.06.2003, 11:54.

        Kommentar


        • #5
          verzeihung, mein fehler. ich hab's oben geändert.
          und du hast recht (auch wenn du es weggeedited hast), die gibt ein array zurück da steig ich dann wirklich aus. irgendwo ist in dem ganzen ding der wurm drin
          [color=#FF6C00]Da werden Sie nicht geholfen.[/color] --> [[color=#292626]httpsmog[/color]] <!-- [color=#FF6C00]Da werden Sie nicht geholfen.[/color]

          [color=#292626]"I have not failed. I've just found 10,000 ways that won't work." [/color] - Thomas Alva Edison (1847-1931)

          Kommentar


          • #6
            ehrlich gesagt erkenne ich in der funktion gar keine wirklichen zusammenhänge.

            vermutlich willst du in $bbcodes den gekürzten text speichern, aber da speicherst du nichts.

            am einfachsten wäre es wahrscheinlich , wenn du die teile zwischen den bbcodes rausfilterst, die teile kürzt und wieder zusammensetzt, also nicht nach der reihe durch gehen wie du es momentan tust.
            sehr verwirrend.

            Kommentar

            Lädt...
            X