Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Code in ereg_replace

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Code in ereg_replace

    hallo Leute,

    ich habe folgendes Problem:

    Ich habe eine Funktion, die mehrere Dinge in einem Dokument sucht udn durch andere ersetzt (so wie BB-Code)

    Nun möchte ich aber etwas durch php und HTML Code ersetzen.
    jedoch parst er bei der Funktuion ereg_replace den PHP Code nicht.
    Ein Versuch mit dem Parameter /e führte zu einer Fehlermeldung:

    Warning: preg_replace() [function.preg-replace]: Unknown modifier '/' in ...

    die Funktion preg_replace_callback benötigt ein array, was aufgrund meiner Funktion sehr schwierig zu erstellen ist.

    hier mal mein bisheriger code

    PHP-Code:
    function ersetzen($a,$b)
    {
    $search = array ("'<script[^>]*?>.*?</script>'si",
                     "'<[/!]*?[^<>]*?>'si",);
    $replace = array ("",
                     "",);
    $b = preg_replace($search, $replace, $a);
    $b = preg_replace("!\[bild=(.*?)\]!/e", "<?php \$bildnr = $1;\$m=mysql_query(\"select * from Bilder where bildnr='\$bildnr'\");?><img src=\"files/<?php echo mysql_result(\$m,0,2);?>\"></img><br><?php echo \"test\";echo mysql_result(\$m,0,1);?>"$b);
    $b preg_replace("!\[b\](.*?)\[/b\]!s","<div style=\"font-weight:bold\">$1</div>",$b);
    $b preg_replace("!\[i\](.*?)\[/i\]!s","<div style=\"font-style:italic\">$1</div>",$b);
    $b preg_replace("!\[u\](.*?)\[/u\]!s","<div style=\"text-decoration:underline\">$1</div>",$b);
    $b preg_replace("!\[q\](.*?)\[/q\]!s""<table border=\"1\" class=\"quote\"><td>Zitat:<br>$1</div></td></table>",$b);
    $b preg_replace("!\[url=\"(.*?)\"\](.*?)\[/url\]!""<a href=\"$1\" target=\"_blank\">$2</a>"$b);
    $b preg_replace("!\[img\](.*?)\[/img\]!""<img src=\"$1\"></img>"$b);
    $b preg_replace("!\[color=\"(.*?)\"\](.*?)\[/color\]!s""<font color=\"$1\">$2</font>"$b);
    $b preg_replace("!\[center\](.*?)\[/center\]!s""<center>$1</center>"$b);
    $b preg_replace("!\[size=\"(.*?)\"\](.*?)\[/size\]!s""<div style=\"font-size:$1pt;\">$2</div>"$b);
    $b preg_replace("!\[list\](.*?)\[/list\]!s""<ul>$1</ul>"$b);
    $b preg_replace("!\[\*\](.*?)\[/\*\]!s""<li>$1</li>"$b);
    $b preg_replace("!\[size=(.*?)\](.*?)\[/size\]!s""<div style=\"font-size:$1pt;\">$2</div>"$b);
    $b rawurldecode ($b);
    echo 
    nl2br($b);
    }
    Es handelt sich hier um die Zeile, in der [bild=x] durch ein Bild ersetzt werden soll, welches seinen Dateinamen und die Bildunterschrift aus einer Datenbank ausließt.

    Bitte um Hilfe und um keine Aussage wie "ließ dir das Manual zu ereg_replace_callback durch."

    mfg
    alex

  • #2
    Formatier mal den String entsprechend, das Backslash ist nicht nur für Anführungszeichen da.

    Kommentar


    • #3
      habe ich, das sieht nun fgolendermaßen aus:


      PHP-Code:

      $b = preg_replace("!\[bild=(.*?)\]!", "<?php \$bildnr = $1;\$m=mysql_query\(\"select * from Bilder where bildnr\='\$bildnr'\"\);?><img src=\"files/<?php echo mysql_result\(\$m,0,2\);?>\"></img><br><?php echo \"test\";echo mysql_result\(\$m,0,1\);?>"$b);
      Zusatzinfo: bei den Eigenschaftes des Bildes findet sich folgendes:
      .../uebung/files/%3C?php%20echo%20mysql_result\($m,0,2\);?%3E

      Kommentar


      • #4
        Zusatzinfo: bei den Eigenschaftes des Bildes findet sich folgendes:
        .../uebung/files/%3C?php%20echo%20mysql_result\($m,0,2\);?%3E[/QUOTE]

        Ja ist ja auch richtig und das macht PHP auch ganz toll, wenn Du zum schluß:
        $b = rawurldecode ($b);
        verwendest

        Kommentar


        • #5
          Du wirst um preg_replace_callback nicht herumkommen.
          Ich versteh ehrlichgesagt auch nicht, was du mit
          die Funktion preg_replace_callback benötigt ein array, was aufgrund meiner Funktion sehr schwierig zu erstellen ist.
          meinst.
          Was ist schwierig? Probiers einfach mal und lass dir in deiner Callback-Funktion zunächst einfach das übergebene Array ausgeben. Dann siehst du wie dieses aufgebaut ist und kannst dann demenstprechend deinen Code anpassen....


          Edit:
          Die Fehlermeldung erhälst du deshalb, weil es keinen Modifier "/" gibt. Der Schrägstrich hat an der Stelle nichts verloren: Modifier werden nach dem Delimiter geschrieben, dein Delimiter ist "!".
          Aber auch wenn du das korrigierst wird dein Code so noch nicht laufen.
          Ich würde das auch garnicht über eval versuchen: Du handelst dir so nur eine Lücke ein, da der String der ausgeführt werden soll vom Benutzer beinflussbar ist.... (Deswegen solltest du in deinem SQL-Query auch mysql_real_escape_string() verwenden...)

          Kommentar


          • #6
            das Problem:

            ich bin nicht ganz sicher wie man preg_replace_callback funktioniert. ich habe nur eine wage Idee:

            PHP-Code:
            function parseTagsRecursive($b)
            {

                $regex = '!\?php(.*?)\?>!s';

                if (is_array($input)) {
                    $input = '<?php $input[1?>';
                }

                return preg_replace_callback($regex, 'parseTagsRecursive', $input);
            }

            Kommentar


            • #7
              Was willst du als Ausgabe haben? Inline PHP Code, dieser muss dann noch übersetzt werden, oder willst du es dierekt zum Browser senden, dann muss dein Inlinecode in der Callback funktion ausgeführt werden!

              Kommentar


              • #8
                Crosspostings ( PHP Code in Regulärem Ausdruck. - Forum: phpforum.de ) sind hier nicht erwünscht.

                Mod: geschlossen.

                Kommentar

                Lädt...
                X