BBTAGS bei gekürztem text schließen

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

  • BBTAGS bei gekürztem text schließen

    Hi Leute,

    ich habe mir mal ein paar gedanken zum Thema gemacht und möchte von euch mal ne Meinung hören. Nunja, es ist erstmal ein Anfang.

    *edit: nun werden auch die bbcodes à la [xy=123]...[/xy] gefiltert und ggf. angehängt. Nun bin ich am überlegen, wie man die angehängten BBTAGS so ordnen kann, das sie auch in der richtigen Reihenfolge angehängt werden...

    PHP-Code:
    <?php
    $text  
    "[BLOCK]Das [I]FBI hat laut [GREEN]US-Medien rund 170 Mio. Dollar in eine Datenbank investiert,\n";
    $text .= "welche für den Kampf gegen den Terror dienen sollte. Jedoch musste das Projekt\n";
    $text .= "bereits vor seiner Einführung wegen Technik- und Planungsfehlern eingestellt werden.\n";
    $text .= "Das Programm sollte es den FBI-Mitarbeitern ermöglichen, Informationen über Ermittlungen\n";
    $text .= "digital zu speichern und Querverbindungen [/GREEN]einzelner Fälle schnell zu entdecken. FBI-Direktor\n";
    $text .= "Robert Mueller ist frustriert über dieses Scheitern und eine Untersuchungskommision hat\n";
    $text .= "Verknüpfungen verschiedener Ereignisse vor dem 11.Sep. gefunden welche aber aufgrund mangelnder\n";
    $text .= "Ausrüstung nicht [/i]rechtzeitig erkannt wurden.[/BLOCK]";

    $text_sub substr($text,0,200);
    print (
    "<p>");
    print (
    $text_sub);
    print (
    "</p>");

    function 
    close_bbtags ($str_text) {
        
    $bbtags = array(i,green,red,block);       # zu schließende BBTAGS
        
    FOREACH ($bbtags AS $value) {
            
    preg_match_all("/\[$value\]/siU",$str_text,$bb_open);
            
    preg_match_all("/\[$value=(.*)\]/siU",$str_text,$bb_open_ext); 
            
    preg_match_all("/\[\/\$value]/siU",$str_text,$bb_close);
            
    $bbo count($bb_open[0])+count($bb_open_ext[0]);
            
    $bbc count($bb_close[0]);
            FOR (
    $x=$bbc;$bbo $x;$x++) {
                
    $str_text $str_text."[/".$value."]";
            }
        }
        return 
    $str_text;
            
    }
    print (
    close_bbtags($text_sub));
    ?>
    Zuletzt geändert von ; 16.01.2005, 12:46.

  • #2
    *stürm*

    hmm ... mal ganz dumm drüber nachgedacht: Man sollte auch noch drauf aufpassen, dass durch das substr keine Tags in der Mitte durchgeschnitten werden. Ne saubere Methode wär vielleicht sowas:
    [list=1][*]preg_replace('%\[(.+)\](.*)\[$1\]%Uise', ???, $text)
    ??? = in $2 nachschauen, ob irgendwo nicht geschlossene bb-tags rumhängen, deren closer dann am Ende von $2 einfügen.[*]dann ein preg_split('%\[.+\]%Uis) über alle bbtags mit PREG_SPLIT_DELIM_CAPTURE und PREG_SPLIT_OFFSET_CAPTURE[*]die Länge der reinen Text-Teile aufsummieren bis 200 erreicht sind und alle Delimiter bis zum passenden Offset wieder rein.[*]Abschließend nochmal im gesamten Text nach nicht (mehr?) geschlossen Tags suchen und diese schließen[*]fertigo.[/list=1]
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar

    Lädt...
    X