preg_replace - soll funktion mit parameter aufrufen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace - soll funktion mit parameter aufrufen

    Hallo, ich habe in meinem HTML Code Tags wie folgt vorgesehen:

    PHP-Code:
    texttext text text %name[id]% text text 
    nun soll %name[id]% durch etwas ersetzt werden, was mir eine funktion

    PHP-Code:
    function data($id){
    //do something with $id ...
    return $id;

    abnimmt (es lässt sich nicht durch einen ersetzungausdruck realisieren, da ein mysql-query involviert ist)

    Leider weiß ich nicht wie ich das realisieren soll, denn wenn ich

    PHP-Code:
    preg_replace("/%name\[(.*?)\]%/i",data("$1"),$obj); 
    aufrufe, dann kommt in der funktion nur "$1" an und die ersetzung wäre in diesem fall "id" ...

    ... kann mir da vieleicht jemand einen tipp geben, wie ich für jedes vorkommen der REGEX eine eigene Ersetzungsfunktion mit dem parameter auslösen kann?

    Danke ... mfg

  • #2
    preg_replace_callback

    Kommentar


    • #3
      das geht mit dem "e":
      PHP-Code:
      <? preg_replace("/foo/ie", " 'text hier' . data('\\\\1', 'bla') ", $obj) <?

      Kommentar


      • #4
        Original geschrieben von c0re.ak
        das geht mit dem "e":
        PHP-Code:
        <? preg_replace("/foo/ie", " 'text hier' . data('\\\\1', 'bla') ", $obj) <?
        Wunderbar, das war die lösung. Das mit dem 'e' hatet ich mir shcon gedacht, jedoch finde ich ja die beispiele in der php.net referenz tlw. doch zu abstrakt um sie auf die eigenen bedürfnisse anzupassen.

        also tausend dank!

        Kommentar


        • #5
          e - wie eval
          damit sollte man vorsichtig umgehen. in diesem falle würde ich den callback vorziehen.

          nur so am rande bemerkt.

          Kommentar


          • #6
            Und am Rande bemerkt sei auch noch erwähnt, dass es da teilweise zu lustigen Ausgaben kommt bei Ersetzungspattern wie
            PHP-Code:
            " '<bla =\" '.blub('\\\\1')' \">bla</bla>' " 
            Die doppelten Quotes wurden bei mir teilweise escaped ausgegeben, Ohne escapen geht's natürlich aber nicht! Ich vermute da einen PHP Bug. Daher würde ich, wenn wie in meinem Fall, HTML-Tag-Attribute ausgegeben werden müssen, diese mit einfachen Anführungszeichen AKA Apostroph versehen. Das klappt hier..
            Gruß

            Kommentar

            Lädt...
            X