preg_replace & Funktion

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • preg_replace & Funktion

    Hallo,

    habe per Suche leider nichts zu diesem Thema gefunden!

    Ich möchte meine Dokumente in einer Klasse parsen:

    PHP Code:
    $tpl preg_replace("=\{translate\}(.*?)\{\/translate\}=si",$this->translate("$1"),$tpl); 
    $this-translate:
    PHP Code:
        function translate($value){
          echo 
    $value//Testausgabe
          
    $words $this->fetch_language($_SESSION['lang']); //Alle relevanten Sprachvariablen werden
                                                     //in den Array $words eingespeist
          
    return isset($words[$value]) ? $words[$value] : '';
        } 
    Mein Problem ist jetzt aber, dass er mir bei $value den Wert "$1" ausgibt, anstatt die tatsaechliche Variable z.B. "pagetitle"!

    Ich weiß nicht wieso er das nicht macht! Ich blick echt nicht durch!
    Vor allem: was ist der Unterschied zwischen \1 und $1 ???

    Und dann bin ich auf meiner Suche auf den Modifier "e" gestoßen, der in eurem Tutorial leider nicht erwähnt wird. Was macht dieser?

    Danke für eure Antworten
    Last edited by lsgdcity; 10-09-2005, 11:19.

  • #2
    wird

    $this->translate

    als array abgerufn oder assoc ?

    grüsse fanger

    Comment


    • #3
      Re: preg_replace & Funktion

      PHP Code:
      $tpl preg_replace("=\{translate\}(.*?)\{\/translate\}=si",$this->translate("$1"),$tpl); 
      das geht nicht...du musst wenn du eine Funktion aufrufen willst, Pattern Modifier e verwenden, aber du kannst keine Backreference an eine Funktion übergeben, die einen Wert zurückliefert, indem du die Backreferences erst benutzen könntest!

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Comment


      • #4
        @phpfanger: ganz normal als String

        @ghostgambler: Das hört sich überhaupt nicht gut an! Wie kann man dieses Problem umgehen?

        Vielleicht mit preg_match den Inhalt rausfinden und dann per str_replace {translate}$match[0]{/translate} durch die Variable $words[$match[0]] ersetzen.

        Aber ist das wirklich die eleganteste Lösung?

        Comment


        • #5
          Re: preg_replace & Funktion

          Original geschrieben von Lukas Schulze
          Hallo,

          habe per Suche leider nichts zu diesem Thema gefunden!

          Und dann bin ich auf meiner Suche auf den Modifier "e" gestoßen, der in eurem Tutorial leider nicht erwähnt wird. Was macht dieser?

          Danke für eure Antworten
          Modifier 'e' :
          Das Muster ist PHP-Code, der ausgeführt wird. Das Ergebins wird dann für den eigentlichen Vergleich genütz.



          gruss
          LukasS

          Comment


          • #6
            Re: Re: preg_replace & Funktion

            PHP Code:
            $tpl preg_replace("=\{translate\}(.*?)\{\/translate\}=sie"
            'call_user_func_array(array($this, "translate"), "\\1"'), $tpl); 
            oder so

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Comment


            • #7
              Hi,

              @LukasS: Vielen Dank, kann man gut gebrauchen

              @ghostgambler: *wow* ich hab's jetzt noch ein bissl angepasst und es funktioniert.

              PHP Code:
              $tpl preg_replace("={translate}(.*?){/translate}=sie"
              'call_user_func_array(array($this,"translate"), strtoupper("\\1"))'$tpl); 
              Vielen vielen Dank für die Hilfe

              Comment

              Working...
              X