dedlfix: preg_replace php-code einfügen

Beitrag lesen

Hi!

Du brauchst ja für deinen News-Tag eine Sonderbehandlung, indem du zum Beispiel die Funktion erweiterst. Da die jetzige Funktion etwas ausgibt sehe ich eigentlich kein Problem, wenn du den News-Code direkt ausführst und dessen Ergebnis ausgibst.

Ich möchte, dass die Vorgabe aus meiner template Datei genutzt wird und nicht den gesamten code in die auto_replace Funktion einfügen, da man dann bei Änderungen immer darauf achten muss, beide Dateien einheitlich zu ändern. Daher soll der Code aus der Datei gelesen werden.

Du hast dann ein Problem. Bei hinfo hast du einen String, der HTML-Code enthält und ergänzt werden soll, bei news übergibst du ebenfalls einen String, der aber PHP-Code enthält, der ausgeführt werden soll. Wie willst du beide String-Inhalte voneinander unterscheiden, oder besser: wie soll preg_replace() den Unterschied feststellen? Es gibt zwar den Modifizierer "e", mit dem preg_replace() PHP-Code evaluieren/ausführen kann, aber der nützt dir nur im news-Fall was. Für den hinfo-Fall musst du dann Ersetzungen ungefähr so notieren "?><span>\1</span><?php". Wenn du das "e" generell hinzufügst landest du nämlich im PHP-Modus, den du für Nicht-PHP-Code verlassen musst. So eine Lösung ist alles andere als elegant. Du könntest die Verarbeitung aufteilen in HTML-Ersetzungen und Code-Ersetzungen, die du jeweils getrennt bearbeiten lässt, also

$html_search_for, $html_replace_with und preg_replace() sowie
$code_search_for, $code_replace_with und preg_replace() mit Modifier e

Aber es geht meines Erachtens nach noch besser, wenn du Callbacks verwendest, denn Code sollte Code bleiben. Wenn du ihn in eienn String packst ist er schlecht wartbar. Für jede Ergänzung, für die du Code brauchst, erstellst du eine Callback-Funktion (bei der du die Hinweise zu preg_replace_callback() beachtest). $html_search_for und $html_replace_with wird wie bisher behandelt und zusätzlich erstellst du es $callback_search_for, $callback_replace_with (mit dem Namen der Funktion) und lässt es mit preg_replace_callback() bearbeiten.

Wenn dir schon PHP ab Version 5.3 zur Verfügung steht, kannst du auch mit anonymen Funktionen statt Callbacks arbeiten.

Lo!