preg_replace() - wo ist der ver$&/$" Fehler?
dbenzhuser
- php
0 MudGuard0 dbenzhuser0 Raik
0 Tobias Kloth0 lulu
N'Obend
Reißt euch bitte mal kurz von einem der Umgangston-Threads los die hier gerade wuchern :)
Ich bin gerade dabei meinen kleinen Formmailer ein wenig umschreiben und stecke hier schon seit 3 Stunden an dieser dummen kleinen Stelle:
Und zwar hab ich ein kleines Template in dem die Platzhalter in der Form {{name}} drinstehen. Entsprechend sind die Felder im Formular benannt. Hier gehts darum die Formulardaten einzufügen.
Ich hatte es auch schon funktionierend, da mit einer foreach($_POST as $key => $value)-Konstruktion, die für jede Variable einmal komplett über das Template gegangen ist. Ich hätts aber gerne eleganter...
Momentan sieht das Ding so aus:
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
Ich bekomme da nur ein
Parse error: parse error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in (...)
zurück.
Setze ich anstatt dem $1 direkt den entsprechenden namen ein funktionierts, lasse ich das $_POST weg und nehme nur $1, werden die namen korrekt angezeigt, das Pattern scheint also zu stimmen.
Ich hab jetzt schon jede mir denkbare Möglichkeit $_POST[$1] mit oder ohne Anführungszeichen zu schreiben durchprobiert... ich bekomms nicht zum laufen.
Ich gehe davon aus, dass ich irgend einen sau dummen minni-Fehler irgendwo reingehauen hab, wäre nett wenn mich jemand draufstoßen könnte. Ich kanns mir nicht erklären.
Tschö,
dbenzhuser
Hi,
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
Die Parameter werden vor dem Aufruf ausgewertet.
Zu diesem Zeitpunkt ist $1 aber noch nicht definiert - das wird ja erst während des Ausführens von preg_replace (also nach dem Aufruf) ermittelt.
cu,
Andreas
Servus Andreas
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
Die Parameter werden vor dem Aufruf ausgewertet.
Zu diesem Zeitpunkt ist $1 aber noch nicht definiert - das wird ja erst während des Ausführens von preg_replace (also nach dem Aufruf) ermittelt.
Danke dir, das erklärt es. Zumindest bin ich noch nicht senil...
Dann werd ich mir was anderes überlegen müssen. Argh :(
tschö,
dbenzhuser
Hallo, dbenzhuser!
Dann werd ich mir was anderes überlegen müssen. Argh :(
arbeite mit preg_match und führe das austauschen in der nächsten zeile durch. ;)
freundl. Grüsse aus Berlin, Raik
Hallo,
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
$1 ist in php eigentlich keine gültige Variable - versuch mal um $1 (oder um $_POST[$1]) einen Satz doppelte Anführungszeichen zu setzen.
Grüße aus Nürnberg
Tobias
N'Obend
Hallo,
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
$1 ist in php eigentlich keine gültige Variable - versuch mal um $1 (oder um $_POST[$1]) einen Satz doppelte Anführungszeichen zu setzen.
Alles schon probiert, um $_POST[] gibts eine Fehlermeldung, um $1 werden die Platzhalter einfach gelöscht.
MudGuards Erklärung leuchtet mir durchaus ein. Nur gefallen will sie mir nicht ;)
Tschö,
dbenzhuser
Huhu dbenzhuser
Momentan sieht das Ding so aus:
$bla = preg_replace("!{{(.*)}}!U", $_POST[$1], $string);
Eine einfache Möglichkeit wäre der e-modifier (eval).
Also z.B. so
<?php
$test = array ('LAND' => 'Griechland', 'STADT' => Athen);
$text = "Die Haupstadt von {LAND} ist {STADT}.";
$bla = preg_replace('#{(.*)}#Ue', '$test["$1"]', $text);
echo $bla;
?>
Oder als Funktion
<?php
$test = array ('LAND' => 'Griechland', 'STADT' => Athen);
$text = "Die Haupstadt von {LAND} ist {STADT}. {FAHNE}";
function ReplacePlaceHolder($v, $arr)
{
$v = preg_replace ('/({(.*)})/eU', "isset($arr['\2'])?$arr['\2']:'\1'",$v);
return $v;
}
echo ReplacePlaceHolder($text, $test);
?>
Viele Grüße
lulu
Moin lulu
Eine einfache Möglichkeit wäre der e-modifier (eval).
Hui, das klappt tatsächlich :)
Meine Zeile sieht jetzt so aus:
$bla = preg_replace("!{{(.*)}}!eU", "$_POST[$1]", $string);
Damit funktioniert es.
In eine Funktion werde ich es so oder so noch packen müssen, da sind noch eine Menge mehr Abfragen und Anpassungen nötig. So ist zumindest schon mal der Anfang geschafft.
Danke dir,
dbenzhuser