Andavos: Function in preg_replace aufrufen

Hallo,

also ich möchte innerhalb preg_replace() die function "php_code" aufrufen.

Hintergrund:
Also der User soll die Chance bekommen, PHP-Code einfärben zu lassen. Also schreibt er seinen PHP Code zwischen [php] und [/php]
Den Text dazwischen fräbt er dann ein.

Das Problem: Wie bekomme ich es hin, das der Text dazwischen "extrahiert" wird, bearbeitet wird und dann farbig wieder eingefügt wird?
Das problem ist ja, das es mehrere Schritte sind (Zeilen zählen, einfärgen etc.) damit man es wieder ausgeben kann.

Dafür habe ich die Schirtte alle in der function: php_code

Dann ist in der function: bb_code folgendes:
$text = preg_replace("/[PHP](.*?)[/PHP]/si", php_code("$1"), $text);

Bin auch über alle anderen Vorschläge froh, wie ich den/die Text/e (wichtig!) zwischen [php]...[/php] "rausbekomme", damit ich nur den Text bearbeiten kann, der rest des Beitrages soll nicht bearbeitet werden.
Man kan nauch ruhig andere Techniken testen/vorschlagen, hauptsache sie gehen.

Wenn ich anstatt $1 nur <?php echo 'hi'; ?> schreibe, funktioniert die Ausgabe, allerdings nicht wenn ich $1 oder \1 schreibe.

MFG
Andavos

--
http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  1. Huhu Andavos

    also ich möchte innerhalb preg_replace() die function "php_code" aufrufen.

    Dafür gibt es die Funktion preg_replace_callback()

    http://de.php.net/manual/en/function.preg-replace-callback.php

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo,
      Hmm hab damit irgendwie Probleme:

      Also ich habe:
      [php]<?php
      echo 'hi';
      ?>[/php]

      Das soll er hiermit ersetzen:

      $text = preg_replace_callback("/[PHP](.*?)[/PHP]/si", "php_code", $text);

      function php_code($text)
      {
      ...
      return $php_code;
      }

      Ausgabe:
      Array

      Jemand eine Idee woran das liegt?

      MFG
      Andavos

      --
      http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
      1. Huhu

        Jemand eine Idee woran das liegt?

        Schau Dir die Beschreibung im Manual nochmal _genau_ an.

        Beachte auch die Beipspiel bei den user comments.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
      2. Hi,

        Jemand eine Idee woran das liegt?

        nein - leider nicht. Ich habe aber noch einen anderen Vorschlag: ich würde bei preg_replace den Parameter /e benutzen, der den ersetzenden Code ausführt, also in etwa so:

        $text = preg_replace("/[PHP](.*?)[/PHP]/sie", "highlight_string(stripslashes('\1'), true)", $text);

        Statt highlight_string() kannst du natürlich dann auch deine Funktion php_code() einsetzen.

        Gruß,
        Andreas.

        1. Hallo,
          danke es geht :) *freu*

          Aber wie sieht es mit der Sicherheit aus? Benutze das für ein Board, und könnte jemand dadurch bösen Cpde ausführen?

          Script:

          $text = preg_replace("/[PHP](.*?)[/PHP]/sie", "php_codes("\1")", $text);
          MFG
          Andavos

          --
          http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
          1. Hallo,

            hmm das geht auch nicht *heul*, denn da bekomm ich ganz andere Fehler.
            Wenn der User z.B.
            <?php
            echo $hi;
            ?>

            schreibt, versucht natürlich das $hi durch den Wert der Var $hi zu erstezen.
            Diesen gibt es nicht, also bleibt dort stehen
            <?php
            echo ;
            ?>

            MFG
            Andavos

            --
            http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    2. Hallo,
      hmm gut jetzt weiß ich das es ein array ist :/

      Allerdings wie kann ich das Array in einen String umwandeln? implode und foreach() haben nicht funktioniert :(

      Und bei den Usercommand finde ich leider keine passende Antwort :(

      Hast nicht evt. noch einen Tipp auf lager?

      MFG
      Andavos

      --
      http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
      1. Huhu Andavos

        Und bei den Usercommand finde ich leider keine passende Antwort :(

        ich schon ;-)

        // as usual: $matches[0] is the complete match
         // $matches[1] the match for the first subpattern
         // enclosed in '(...)' and so on

        Hast nicht evt. noch einen Tipp auf lager?

        Also folgendes sollte als Callback-Funktion funktionieren:

        function php_code($para)
        {
           $s = highlight_string($para[1], 1);
           return $s;
        }

        Da funktioniert der Vorschlag von Andreas natürlich genauso gut.
        Eine eigene Callback-Funktion ist hier also ggf. überflüssig.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Hallo lulu,
          ah danke :)
          Es geht.

          So wie das Andreas gemacht hat, geht es nicht ganz, denn er versucht dann Variablen durch deren Werte zu ersetzen, also so:

          <?php
          echo $hi;
          ?>

          wird zu
          <?php
          echo ;
          ?>

          denn für $hi wurde kein Wert definiert.
          Aber das mit callback geht

          MFG
          Andavos

          --
          http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr