Phil: replace mit variable

Hallo,

ich benötige mal wieder einen kleine hilfe =)..

Und zwar ist mein Problem: ich möchte mit einem replace eine variable ersetzen...

beispiel:

$lang['lang_name'] = "Deutsch";

$template = "Sprache: {lang:name}";

$template = eregi_replace("{lang:([^[]+)}",$lang['lang_\1'],$template);

echo $template;

...

nun hätte ich gerne das er mir das aus der variable ersetzt ... also dann

"Sprache: Deutsch" ausgibt ...

weiß nicht wie ich das anstellen soll .. hab schon alles rumprobiert und nix funzt ...

er erkennt das {lang:name} und ersetzt mir dann auch {lang:name} zu ""lang_name"" wenn ich es so mache:

$template = eregi_replace("{lang:([^[]+)}",'lang_\1',$template);

er will das blos irgendwie nciht mit der variable ...

bitte um hilfe

  1. Habe es auch so ausprobiert falls jemand denkt ich hätte nichts anderes ausprobiert ;)

    $template = preg_replace("!{lang:(.*?)}!",$lang['\1'],$template)

  2. echo $begrüßung;

    $lang['lang_name'] = "Deutsch";

    Das sieht sehr nach variabler Variable aus. Der Teil 'name' steht doch sicher für verschiedene Werte?

    $template = "Sprache: {lang:name}";
    $template = eregi_replace("{lang:([^[]+)}",$lang['lang_\1'],$template);

    Kontrollausgaben können erleuchtend sein, wenn man sie macht. Das error_reporting auf E_ALL zu stellen ist auch immer hilfreich. Du hättest dann einen Fehler bekommen, weil es den Schlüssel lang_\1 nicht in $lang gibt. Du erwartest, dass die Funktion eregi_replace() den Parameter, der ihr übergeben wird im Voraus ändert. Zumindest hast du das so notiert. Das geht so nicht. Der zweite Parameter soll ein String sein, der Platzhalter enthalten darf. Wenn du einer Funktion eine Variable übergibst, wird diese zuerst ausgelesen bevor die Funktion mit deren Inhalt aufgerufen wird. Die Platzhalter, die eregi_replace() in dem String erwartet, sind nur dieser Funktion bekannt. Das restliche PHP hat davon keine Ahnung. Das gleiche Problem hast du mit dem preg_replace().

    $template = eregi_replace("{lang:([^[]+)}",'lang_\1',$template);
    er will das blos irgendwie nciht mit der variable ...

    Mir fällt keine andere Lösung ein, als preg_replace() mit dem Modifizierer e zu verwenden. Beachte dabei aber, dass auch hier eine eval()uation vorliegt, die gegen unbeabsichtigtes Code-Ausführen gesichert werden muss.

    echo "$verabschiedung $name";

    1. Habe gerade ne Lösund rausbekommen ..

      und zwar ...

      Liste:

      $lang['lang_name'] = 'Deutsch';
      $lang .... und und und

      die Funktion für den Replace

      function lang_replace_lang($i) {
       global $lang;
       return $lang['lang_'.$i[1]];
      }

      der Replace mit preg_replace_callback

      $tpl_finish=preg_replace_callback("!{lang:(.*?)}!",lang_replace_lang,$tpl_finish);

      das is bisher die einzige möglichkeit das ich das replacen kann ..
      funktioniert auch soweit ohne fehler ..

      danke trotzdem für deinen tipp und die schnelle antwort