[PHP] eregi_replace und PHP CODE einfuegen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von m0mo, 13.02.2006.

  1. m0mo

    m0mo Thread Starter MacUser Mitglied

    Beiträge:
    479
    Zustimmungen:
    2
    MacUser seit:
    26.03.2005
    Hallo Leute, kurzknackige Frage:

    Ich hab fuer eine Textformatierung immer BBCODE Befehle die dann umgewandelt wurden, wie z.B. sowas hier:

    PHP:
    # fuer Ueberschriften 
    $return eregi_replace("\[ueber\]""<h3>"$return);
    $return eregi_replace("\[\/ueber\]""</h3>"$return);
    Nun moechte ich ein aehnliches Feature einbauen. Wenn man auf eine Seite beispielsweise nur "[news]" eintraegt, sollen alle News, die in einer Tabelle sind, ausgegeben werden. Nun wollte ich das ganze aehnlich angehen, komme aber nicht zum Erfolg.

    PHP:
    $return = eregi_replace("\[news\]", <?php include("incl_news.php"); ?>, $return);
    bringt einen Ausgabefehler, (fehlende Gaensefuesschen)

    und

    PHP:
    $return = eregi_replace("\[news\]", "<?php include(incl_news.php); ?>", $return);
    gibt mir zwar den Text aus, aber nicht den Code.

    Meine Frage: Wie kann ich meinen Wunsch realisieren? Oder muss ich das ganze vollkommen anders angehen?

    mfg
    m0mo
     
  2. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    MacUser seit:
    20.03.2005
    Ja, musst du. Du musst zunächst prüfen, ob '[news]' im String vorkommt, dann deine News aus der Datenbank holen und abschließend [news] durch das Ergebnis ersetzen.

    Matt
     
  3. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    -- Doppelpost --
     
  4. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    Warum machst Du es nicht in dieser Art:

    Code:
    $arr = explode("[news]", $text);
    
    if (isset($explode[1]) AND $explode[1]!="") {
       $news = getNews();
       print $explode[0].$news.$explode[1];
    }
    
    Vielleicht nicht ganz so hübsch und vielleicht im Laufverhalten auch etwas langsamer, aber dadurch, dass man für diesen Code 30 Sekunden braucht und Du bis zum richtigen Ergebnis mehrere Stunden nachdenkst, steht es in keinem wirtschaftlichen Verhältnis zueinander, weshalb ich meine Lösung für sinnvoller halte.

    Gruß Philip
     
  5. dms

    dms Gast

    Oder so:

    Code:
    $return = eregi_replace("\[news\]",  file_get_contents("http://".$_SERVER["HTTP_HOST"]."/externer_pfad_zu/incl_news.php") , $return);
    Hier wird allerdings eine weitere externe HTTP-Anfrage gestellt. Ich würde aber auch eine der anderen Varianten vorziehen.
     
  6. moses_78

    moses_78 MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Mir ist da gerade noch eine Variante eingefallen, falls
    noch Bedarf besteht, sie würde zumindest kein neues
    HTTP-Request aufrufen...

    PHP:
    <?php

     ob_start
    ();
     include(
    news.php);
     
    $news ob_get_contents();
     
    ob_end_clean();

     
    //etwas mit $news machen...

    ?>
    Ausserdem würde ich zu "str_replace()" raten, da dies
    keine Regexp erwartet und daher schneller ist.
     
  7. dms

    dms Gast

    Genial! :)
     

Diese Seite empfehlen