tobler: Gästebuch: Links und Bilder

Hi.

Ich habe ein Gästebuch programmiert (PHP). Das mit den Smileys klappt auch schon:

$fcom=str_replace(":-)","<img src='img/gb/s04.gif'>",$fcom);

Doch jetzt wollte ich an Links und Bilder rangehen:
Es soll wie hier in diesem Forum sein. xyz soll nachher zu <a href="adresse">xyz</a> umgewandelt werden. [img:adresse] soll nachher zu <img src="adresse"> werden.

Mit der einfachen str_replace ist das nicht möglich, das ist mir inzwischen klar geworden. Gibt es eine Funktion, die eben das macht? Habe versucht, mich in preg_replace einzuarbeiten. Doch ich habe es bis heute nicht begriffen. Auf der PHP-Doku wird das zu wenig erklärt.
Wäre es möglich, mir hier zu erklären, wie preg_replace funktioniert, und ob es überhaupt zu meinem Problem die Lösung ist?

der tobler aus hessen

  1. Hi tobler,

    Mit der einfachen str_replace ist das nicht möglich, das ist mir inzwischen klar geworden.

    Richtig ;-)

    Gibt es eine Funktion, die eben das macht? Habe versucht, mich in preg_replace einzuarbeiten.

    Genau das brauchst du.

    Doch ich habe es bis heute nicht begriffen. Auf der PHP-Doku wird das zu wenig erklärt.

    Vielleicht hilft dir http://tut.php-q.net/regex.html weiter...

    Wäre es möglich, mir hier zu erklären, wie preg_replace funktioniert, und ob es überhaupt zu meinem Problem die Lösung ist?

    Du benötigst „Reguläre Ausdrücke” - kurz RegEx von engl. Regular Expressions - das ist ein Kapitel für sich.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
    Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)
    1. Hi

      Vielleicht hilft dir http://tut.php-q.net/regex.html weiter...

      Das ist gut. Dazu hätte ich (was auch sonst) ein paar Fragen:

      Muss der Delimiter immer angegeben werden, und was passiert, wenn man ihn weglässt?

      Hätte dann
        preg_match('/foobar/', $_POST['text']);

      dieselben Auswirkungen wie
        preg_match('foobar', $_POST['text'])

      ?

      Müsste der Code zum Ersetzen von :-) mit <img...> (wenn er auch mit str_replace einfacher gehen würde) so
      $fcom=preg_replace('/:-)/','<img...>',$fcom);

      aussehen?

      1. Hallo tobler,

        Müsste der Code zum Ersetzen von :-) mit <img...> (wenn er auch mit str_replace einfacher gehen würde) so
        $fcom=preg_replace('/:-)/','<img...>',$fcom);

        Nein, ) muss maskiert werden, also eher so:

        $fcom = preg_replace('/(:-))/','<img alt="Smiley: \0" src="grin.gif" />',$fcom);

        Gruß
        Alexander Brock

        --
        SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
        http://againsttcpa.com
      2. Hi tobler,

        Muss der Delimiter immer angegeben werden, und was passiert, wenn man ihn weglässt?

        Ja. Probiers doch mal aus ;-)

        Hätte dann
          preg_match('/foobar/', $_POST['text']);

        dieselben Auswirkungen wie
          preg_match('foobar', $_POST['text']);

        Nein, ersteres klappt und liefert true oder false zurück, letzeres dürfte einer Fehlermeldung à la "No Delimiter found" ausgeben.

        Müsste der Code zum Ersetzen von :-) mit <img...> (wenn er auch mit str_replace einfacher gehen würde) so

        $fcom=preg_replace('/:-)/','<img...>',$fcom);

        Nein, ) ist ein Zeichen für eine Subpattern, du musst es wie Alexander schon sagte durch einen Backslash escapen:

        preg_replace("/:-\)/",'<img src="pfad/zum/smiley.gif" alt="">', $string);

        Was Alexander jetzt noch gemacht hat, er hat direkt Subpattern verwendet und den Ausdruck :-) noch mal eingeklammert, dann kannst du im ersetzen-Teil durch \1 bzw. $1 (ersteres ist veraltet) auf den Wert zugreifen.

        Das macht jetzt in diesem Fall nicht wirklich Sinn, aber für einen Link wirst du es brauchen:

        preg_replace("=\[link:(http://|ftp://|mailto:)([^\]*)\]=",'<a href="$1$2">$2</a>', $string);

        Hier würden jetzt http://, ftp:// und mailto: Links ersetzt. Als Delimiter habe ich = gewählt, sonst hätte ich die ganzen / ebenfalls escapen müssen. Die Links werden jetzt hier allerdings nicht auf Gültigkeit geprüft (optisch), so wie hier im Forum, @title ist auch nicht drin.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
        [remote-signature:http://tutorial.riehle-web.com/selfforum/signatur.php]
  2. Moin,

    Hi.

    Ich habe ein Gästebuch programmiert (PHP). Das mit den Smileys klappt auch schon:

    http://www.christian-seiler.de/projekte/php/bbcode/
    Hilft und erspart Dir jede Menge Arbeit.

    TomIRL