preg_replace - soll funktion mit parameter aufrufen

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

  • 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

    Comment


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

      Comment


      • #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!

        Comment


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

          nur so am rande bemerkt.

          Comment


          • #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ß

            Comment

            Working...
            X