Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
preg_replace und Funktionen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
preg_replace und Funktionen


 
hottemp
22-09-2002, 10:27 
 
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???

 
hottemp
22-09-2002, 15:11 
 
keine Ideen? oder seid ihr alle bei der wahl??? :D

 
Campus
22-09-2002, 16:01 
 
ich darf nicht wählen <--- ausländer, lol
muss nicht der ganze suchstring in kaskadiert in klammern stehen ?

 
hottemp
22-09-2002, 16:21 
 
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.

 
Nezzar
22-09-2002, 17:05 
 
An die RegEx modifikator 'e' anhängen und die Funktionnamen als string übergeben:

$text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf(\\1)',$text);

 
hottemp
22-09-2002, 17:33 
 
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.

 
Nezzar
23-09-2002, 14:14 
 
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)

 
hottemp
23-09-2002, 15:03 
 
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?

 
TBT
23-09-2002, 16:53 
 
vertausche mal ' und " in deinem Ausdruck,
bei mir funzt folgendes einwandfrei:

$text=preg_replace("/&lt;(.*)&gt;/esiU","'<span id=cht>&lt;'.\$this->xcode_html_param('\\\\1').'&gt;</span>'",$text);


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:51 Uhr.