Gästebuch: Links und Bilder
tobler
- php
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
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.
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?
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
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.
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