• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Links als Links erkennen

Status
Für weitere Antworten geschlossen.

Icy

Neues Mitglied
Hallo,

möchte in meinem Gästebuch in den Einträgen gern Links als solche erkennen und dann "anklickbar" machen, also mit einem <a>-Tag versehen.
Mein Ansatz ist erstmal, dass ich den Text nach "http://" durchsuche und die gefundenen Strings dann bearbeite.
Aber ich weiß nicht genau, wo ich dann das </a> hinsetzen soll, also woher mein Script wissen soll, wo der Link endet.
Kann mir da wer helfen? :)

MfG Icy
 
Werbung:
Nimm einfach das nächste Leerzeichen;) URIs dürfen keine Leerzeichen enthalten.
Oder du machst es als BB-Code mithilfe von [ url].
 
Ok danke erstmal :)
Per BBCODE wollte ich es nicht machen, sondern die Links automatisch erkennen lassen.
Okay, wenn ich dann jetzt das Leerzeichen als Begrenzung nehme, wie sag ich dem Script dann: "Hole mir die Strings aus dem Text, die mit http:// starten und vor einem Leerzeichen enden?" Den ersten Teil kann ich ja mit str_replace() lösen, aber wie sage ich dem Script die Endposition (Leerzeichen)?

MfG Icy
 
Werbung:
PHP:
$text = preg_replace("#(http://[^ ]+)#is", "<a href=\"$1\">$1</a>", $text);
 
Danke, genau so wie ich es haben wollte :)
Kleine Verständnisfrage: In dem $1 steckt der String, nach dem gesucht wurde?

MfG Icy
 
in $1 steckt das was in dem regulären ausdruck zwischen den runden klammern stand also genau deine URLs ;)
 
Werbung:
Ich sehe da aber noch ein Problem...

Code:
http://"%20onClick="javascript:alert(document.cookie)

Bin gerade in der Schule habs daher nicht getestet, aber wenns geht dann hast du eventuell ein Problem. ;)
 
Werbung:
Naja das angegebene Beispiel funktioniert wirklich nicht aber als ich mir das nochmal genau angeguckt habe hab ich bemerkt das durch den modifier "s" auch Zeilenumbrüche mit eingeschlossen werden also kann man einfach schreiben:

Code:
http://"
onClick="javascript:alert(document.cookie)

Lösungsvorschlag

Code:
$text = preg_replace("#(http://[^ ]+?)#i", "<a href=\"$1\">$1</a>", $text);
oder
Code:
$text = preg_replace("#(http://[^ ]+)#iU", "<a href=\"$1\">$1</a>", $text);

MFG Miah ;)
 
U als Modifier geht nicht, dann wird nur der erste Buchstabe verlinkt ^^

Könnte man nicht theoretisch einfach \n mit in den Regex schreiben?
PHP:
$text = preg_replace("#(http://[^ \n]+)#is", "<a href=\"$1\">$1</a>", $text);
Weiß nicht, ob das geht, aber guck mal.

EDIT: So gehts :)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben