Mailinglisten-Archive |
Hi Nico,
On 16 Sep 2004 at 16:40, Nico Haase wrote:
> ich habe folgendes Problem mit BBCode: Meinen Redakteuren möchte ich
> ermöglichen, Links wie im Wiki zu setzen, sodass sie bspw. einfach
> "[autor]Michael Ende[/autor]" schreiben können und dann, wenn
vorhanden, ein
> Link zur Michael Ende-Seite angezeigt wird oder kein Link.
Als spontane Antwort fällt mir hierzu das Stichwort "Regexpressions"
ein. (http://de3.php.net/manual/de/ref.pcre.php)
> Problem ist: Wie
> parse ich den Code richtig und vor allem performant? Die Autoren
stehen alle
> in einer Datenbank, bestehend aus Name und ID, und jetzt bei jedem
Vorkommen
> von [autor]irgendwas[/autor] einen DB-Query abzusetzen wird ja
ziemlich
> Datenbank-lastig...
Und wieder ganz spontan:
<?
while (preg_match ("/\[autor\](.*?)\[\/autor\]/", $text, $ergebnis) )
{
$autoren[] = $ergebnis[1];
}
?>
So erhältst du immerhin aller vorkommenden Autoren.
Allerdings müsstest du dann erneut alle Treffer mit preg_replace ()
ersetzen.
Du kannst allerdings statt preg_match () gleich mit preg_replace ()
in der while-Schleife verfahren. Allerdings müsstest du dann bereits
vorher eine Liste der Autoren haben. Bei sehr vielen Autoren auch
unperformant.
Grüße Seong
php::bar PHP Wiki - Listenarchive