AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PHP: Problem mit eregi_replace

Ein Thema von Niels · begonnen am 14. Nov 2004 · letzter Beitrag vom 15. Nov 2004
Antwort Antwort
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#1

PHP: Problem mit eregi_replace

  Alt 14. Nov 2004, 15:12
Hallo,

ich möchte einen Teilstring aus eregi_replace (also \\1, \\2, etc.) in einer Funktion zu verändern, weiß aber nicht, wie ich ihn an die Funktion übergeben kann.

Folgender Code ist Sinnlos, dient aber nur zur Veranschaulichung eines Weiteren Problems, was beim Testen aufgetreten ist:

Code:
<?
function funktionsaufruf($text) {
echo $text;
return $text;
}

$post = '[code]hallo
';
$post = eregi_replace("\\[code\\]([^\\[]*)\\[/code\\]", funktionsaufruf('\\1'), $post);
echo $text;
?>[/code]

Innerhalb der Funktion wird '\1' ausgegeben und das 2. Echo gibt 'hallo' aus. Wenn ich die Funktion wie folgt verändere wird jedoch 'blub' ausgegeben:

Code:
<?
function funktionsaufruf($text) {
$text = 'blub';
return $text;
}
?>
Nach der ersten Ausgabe dachte ich, dass zwar in der Funktion die Variable einen falschen Wert hat, aber irgendwie die Funktion in eregi_replace nicht berücksichtigt wird. Die 2. Ausgabe zeigt ja aber, dass die Funktion Einfluss auf eregi_replace nimmt.

Wäre schön, wenn mir das jemand erklären könnte und mir sagen könnte, wie ich nun den wert von \\1 an die Funktion weiter geben kann.

Vielen Dank

MfG Niels
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: PHP: Problem mit eregi_replace

  Alt 14. Nov 2004, 18:04
Zitat von Niels:
Die 2. Ausgabe zeigt ja aber, dass die Funktion Einfluss auf eregi_replace nimmt.
Das schon, aber wie soll den eregi_replace Einfluß auf die Parameter der Funktion funktionsaufruf nehmen? Dein ansatz funktioniert so nicht! Es wird zuerst funktionsaufruf aufgerufen, und dann mit dessen Rückgabewert die eregi_replace Funktion!

Du mußt also erstmal ein match machen, dann kannst du die zu ersetzenen neuen Texte zusammenbauen und dann nochmal ein replace drüber laufen lassen, anders wird es nicht gehen.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#3

Re: PHP: Problem mit eregi_replace

  Alt 14. Nov 2004, 20:18
Hi,
danke erstmal. Dachte, dass \\1, \\2 ... sowas wie Konstanten sind, wusste nicht, dass ich sie nicht an Funktionen weitergeben kann. Da werd ich das ganze eben etwas anders machen müssen.

MfG Niels
  Mit Zitat antworten Zitat
Benutzerbild von titus
titus

Registriert seit: 5. Apr 2004
Ort: Freiburg
232 Beiträge
 
#4

Re: PHP: Problem mit eregi_replace

  Alt 15. Nov 2004, 14:23
Bitte nutze nur noch die die schnellere Variante preg_replace()

Du kannst damit auch an eine Funktion weitergeben und zwar so:
Code:
$var = preg_replace('#\[code\](.*?)\[/code\]#ie', 'deine_funktion("\\1")', $var);
Die Methode mit \\1, \\2... nennt man Backreferencing, da sich das in diesem Fall auf das mit der ersten Klammer (also das (.*?)) zurückbezieht.

mfG, titus
Daniel L.
'-'
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#5

Re: PHP: Problem mit eregi_replace

  Alt 15. Nov 2004, 19:37
OK Danke, funktioniert.
MfG Niels
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz