Hi! Wieder mal die rekursiven:
Ich lasse einen String nach dem Vorhandensein von "{cp:rdfinput}irgendwas{/cp:rdfinput}" durchsuchen. "irgendwas" soll dann an die Funktion newsrdf("irgendwas") übergeben werden.
Der erste Teil funktioniert auch damit:
$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/i",newsrdf(\\1),$text);
Nur ist das Problem, dass er den Inhalt nicht an die Funktion übergeben will. Immer diese Fehlermeldung:
"Warning: fopen("1","r") - No such file or directory in functions.php..."
D.h. dass anscheinend nur \\1 übergeben wird und nicht der String. Wie kann ich dies ändern???
keine Ideen? oder seid ihr alle bei der wahl??? :D
ich darf nicht wählen <--- ausländer, lol
muss nicht der ganze suchstring in kaskadiert in klammern stehen ?
Wie meinen? Steht ja alles in Klammern, und mit kaskadierten habe ich das noch nicht gesehen. Aber das ganze wird ja wie gewünscht ausgeben, nur nicht an die Funktion übertragen.
Da ich aber diese Routine mehrmals verwende in einem String, muss die Funktion innerhalb von preg_replace aufgerufen werden. Ich kann nicht das Ergebnis von preg_replace in einer Variable speichern und dann erst durch die Funktion laufen lassen.
An die RegEx modifikator 'e' anhängen und die Funktionnamen als string übergeben:
$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf(\\1)',$text);
Funktioniert so leider nicht. Ich dachte erst das geht nicht, weil vor dem "/cp:rdfinput" und dem "\1" noch jeweils ein "\" fehlt. Aber dennoch wird mir z.B. bei dem Newsfeed von http://www.phpcenter.de/backend/phpcenter.rss ein Fehler ausgegeben:
Fatal error: Failed evaluating code: newsrdf(http://www.phpcenter.de/backend/phpcenter.rss) in functions.php on line 56
Also:
$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf(\\1)',$text);
gibt mir nur die URL aus.
Ach ja, das Argument für newsrdf() muss dann natürlich in Quotes gesetzt, da ja zuerst der Wert der ersten Backreference eingesetzt wird und DANN der Code eval'ed wird.
Also so:
$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf("\\1")',$text)
Update: Hab es nochmal probiert mit
$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf("\\1")',$text);
Die Funktioniert, ich bekomm die News auf die Seite, allerdings nur wenn das ganze per echo innerhalb der Funktion ausgeben wird. Dann steht alles oben links auf der Seite, also direkt am Anfang des Quellcodes. Alternativen?
vertausche mal ' und " in deinem Ausdruck,
bei mir funzt folgendes einwandfrei:
$text=preg_replace("/<(.*)>/esiU","'<span id=cht><'.\$this->xcode_html_param('\\\\1').'></span>'",$text);