[PHP] eregi_replace und PHP CODE einfuegen

m0mo

Aktives Mitglied
Thread Starter
Dabei seit
26.03.2005
Beiträge
478
Reaktionspunkte
2
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
 
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
 
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
 
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.
 
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.
 
Zurück
Oben Unten