kostenloser Webspace werbefrei: lima-city


php: preg_replace()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    Hallo!
    Wenn ich meinen Text, hier in $eintrag mittels preg_replace() abändere...

    z.B. so:
    $eintrag = preg_replace('#test1(.*)test2(.*)test3#isU', "$1 testet $2", $eintrag);


    ...besteht dann irgendwie die Möglichkeit, $1 ebenfalls mit preg_replace() zu ändern?

    Beitrag zuletzt geändert: 9.5.2011 19:40:26 von anti-atomkraft
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Vielleicht hilft dir hier preg_split() weiter,
    da hast du dann die einzelnen Ergebnisse in einem Array
    und kannst diese dann einzeln weiterbearbeiten.
  4. Autor dieses Themas

    anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    Oh! Der Befehl ist mir neu...
    Ich habe mir nun einige Tutorials durchgelesen, komme damit aber nicht klar...

    Was muss ich machen, um in folgendem Befehl
    $eintrag=preg_replace('#[ code ](.*)[ /code ]#isU', "... $1 ...", $eintrag);

    (Leerzeichen, damit das hier im Forum nicht umgewandelt wird) $1 herauszufiltern
    und ebenfalls z.B. mit preg_replace() zu verändern:
    $1=preg_replace('#[#isU', "[", $1);
    $1=preg_replace('#]#isU", "]", $1);

    ???
  5. g****e

    Hey

    Es wäre vllt hilfreich wenn du die Endapplikation nennst. Möchtest du zufällig einen BB-Code Interpreter schreiben?
    Das wäre auch wie folgt möglich:

    $replacecodes = array( '[b]', '[/b]', ... );
    $replacements = array( '<b>', </b>', ... );
    $text = str_replace( $replacecodes, $replacements, $text);


    Wäre denk ich sogar performanter.

    Um den Code zwischen den Tags zu bekommen, also das in den Klammern, kannst du glaub ich nicht preg_replace verwenden. Dafür müsstest du preg_match( muster , nadel , speichervariable ) nutzen.

    Liebe Grüße
  6. Autor dieses Themas

    anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    Genau!
    Ich bin dabei, für meinen Chat einen BBCode-Interpreter zu schreiben...

    Nur folgendes habe ich noch nicht geschafft:
    [url=example.org]Test[/url]

    Innerhalb des Code-Tags soll kein BBC umgewandelt werden...

    Beitrag zuletzt geändert: 14.5.2011 11:00:03 von anti-atomkraft
  7. g****e

    Hmm, also es ist früh am morgen, erwarte nich zu viel, aber ich würd vermutlich so schummeln:

    $text = [url={example.org}]Test[/url]
    $needle = array( '[url={’ , '}]', '[/url]' );
    $replace = array ('<a href="' , '">' , '</a>');
    $output = str_replace ($needle, $replace, $text );


    Funktioniert vllt bestimmt irgendwie, kA, ungetestet.
    Ist aber noch früh, also teste es vorher^^
  8. Hi!

    Man sollte unbedingt auch auf XSS achten und das so weit, wie möglich abfangen! str_replace hat außerdem den Nachteil, dass wenn der BBCode nicht vollständig geschlossen ist, man sich sein ganzes HTML versaut.


    anti-atomkraft schrieb:
    Nur folgendes habe ich noch nicht geschafft:
    [url=example.org]Test[/url]

    Innerhalb des Code-Tags soll kein BBC umgewandelt werden...


    <?php
      function callback_url ($match) {
        return sprintf("<a href=\"http://%s\">%s</a>", htmlentities($match[1]), htmlentities($match[2]));
      }
    
      //...
      $input = "...[url=http://google.de?q=<br />]Test<br />[/url]...";
      $input = preg_replace_callback("/\[url=http:\/\/(.*)\](.*)\[\/url\]/isU", 'callback_url' , $input);
      echo $input;
      //...
    ?>

    Das sieht dann so aus:
    http://i-spacke.lima-city.de/url_bbcode.php

    Ist jetzt nur schnell zusammengeschrieben. Sollte man wahrscheinlich noch mehr verfeinern, je nachdem, was du halt für deine Zwecke brauchst.

    Wenn du das jetzt vor den anderen BBCodes durchführst, sollte das problemlos laufen.

    LG Spacke

  9. Autor dieses Themas

    anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    Danke!
    Bin in der Zwischenzeit bereits selbst auf diese Lösung gekommen und habe sogar Farbe ins Spiel gebracht:

    function parseVar($treffer)
        {
             $str = $treffer[1];
             $str = str_replace("[", "<span style=\"color:#007700\">[</span>", $str);
             $str = str_replace("]", "<span style=\"color:#007700\">]</span>", $str);
             $str = preg_replace("/(&#039;.*&#039;)/Uis", "<span style=\"color:#DD0000\">\\1</span>", $str);
             $str = preg_replace("/(&quot;.*&quot;)/Uis", "<span style=\"color:#DD0000\">\\1</span>", $str);
             $str = "<span style=\"color:#0000BB\">".$str."</span>";
             return $str;
        }
    
    
    $eintrag = preg_replace('#\[(code|php)\](.*)\[/(code|php)\]#isU', "<b><u>$1:</u></b><div class=\"code\">[var]$2[/var]</div>", $eintrag);
    $eintrag = preg_replace('#\[code=(.*)\](.*)\[/code\]#isU', "<b><u>$1:</u></b><div class=\"code\">[var]$2[/var]</div>", $eintrag);
    $eintrag = preg_replace_callback("/\[var\](.*)\[\/var\]/Usi", 'parseVar', $eintrag);
  10. Ich würde dir trotzdem raten, HTML-Zeichen zu escapen. Ansonsten können User Code einbinden und ziemlich viel Schaden anrichten. genauso musst du aufpassen, wenn du mit einer Datenbank arbeitest. Suche dazu am besten mal nach SQL-Injection.

    LG Spacke
  11. Autor dieses Themas

    anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    Natürlich ersetze ich die Zeichen "<", sowie ">"...
    Das war gerade nur der entscheidende Auszug aus dem Quellcode. :-P
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!