URL anklickbar machen die x-te
Tom
- php
Moin!
Ja, ja, ich weiß, wurde schon oft gefragt, hab auch einiges dazu gefunden. Hab jetzt aber trotzdem noch ne Frage, weil ich das mit den regulären Ausdrücken immer noch nicht ganz durchschaut habe.
Weil ich von den vielen Möglichkeiten gar nicht mehr wusste, wie ich es nun am besten machen soll, hab ich mir mal phpBB runtergelden und geschaut wie die das gemacht haben.
Demnach soll alles verlinkt werden, was mit "xxxx://yyyy" bzw "www." beginnt und vor space, neue Zeile, Komma, double quote oder < endet.
Nun nimmt er das Komma aber doch in den Link hinein, wenn der mit http:// (also http://xyz.xyz, bla) beginnt, wenn man nur www.xyz.xyz schreibt klappts dagegen.
Kann mir das jemand erklären?
Hier die Funktion aus phpBB:
function make_clickable($text)
{
// pad it with a space so we can match things at the start of the 1st line.
$ret = ' ' . $text;
// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, comma, double quote or <
$ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ "\n\r\t<]*)#is", "\1<a href="\2" target="_blank">\2</a>", $ret);
$ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ "\n\r\t<]*)#is", "\1<a href="\2" target="_blank">\2</a>", $ret);
// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
// Must contain at least 2 dots. xxxx contains either alphanum, or "-"
// zzzz is optional.. will contain everything up to the first space, newline,
// comma, double quote or <.
$ret = preg_replace("#(^|[\n ])((www|ftp).[\w-]+.[\w-.~]+(?:/[^ "\t\n\r<]*)?)#is", "\1<a href="http://\2" target="_blank">\2</a>", $ret);
// matches an email@domain type address at the start of a line, or after a space.
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
$ret = preg_replace("#(^|[\n ])([a-z0-9&-_.]+?)@([\w-]+.([\w-.]+.)*[\w]+)#i", "\1<a href="mailto:\2@\3">\2@\3</a>", $ret);
// Remove our padding..
$ret = substr($ret, 1);
return($ret);
}
Danke! Tom
Hi,
Weil ich von den vielen Möglichkeiten gar nicht mehr wusste, wie ich es nun am besten machen soll, hab ich mir mal phpBB runtergelden und geschaut wie die das gemacht haben.
Antwort: grottenschlecht.
Nun nimmt er das Komma aber doch in den Link hinein, wenn der mit http:// (also http://xyz.xyz, bla) beginnt, wenn man nur www.xyz.xyz schreibt klappts dagegen.
Was heißt "klappt's dagegen"? Bei einem fehlenden Protokoll klappt es _nicht_, denn das Komma ist an den meisten Stellen der URL absolut erlaubt. Der Grund für diesen Mangel in der protokollfreien RegExp ist das Fehlen eines ".*", welches allerdings ansonsten ebenfalls hinreichend hirnrissig ist. Das gesamte Vorgehen in diesem Code ist _schlecht_.
Cheatah
Moin!
Weil ich von den vielen Möglichkeiten gar nicht mehr wusste, wie ich es nun am besten machen soll, hab ich mir mal phpBB runtergelden und geschaut wie die das gemacht haben.
Antwort: grottenschlecht.
Hm, eine ideale Möglichkeit gibt's dann wohl nicht, oder? Die im Archiv haben auch alle irgend einen Haken.
Tom
Hi,
Hm, eine ideale Möglichkeit gibt's dann wohl nicht, oder? Die im Archiv haben auch alle irgend einen Haken.
welche denn? Im Archiv findest Du die Generierung der _einen_[1] RegExp, welche für das sichere Erkennen einer RFC-konformen URL taugt.
Cheatah
[1] Natürlich gibt es theoretisch viele Wege, die RegExp umzuschreiben, ohne die Ergebnisse zu beeinflussen.
Moin,
welche denn? Im Archiv findest Du die Generierung der _einen_[1] RegExp, welche für das sichere Erkennen einer RFC-konformen URL taugt.
Du meinst Deine Lösung, oder? http://forum.de.selfhtml.org/archiv/2000_3/t21614.htm#a110363
Wegen dem fehlenden Protokoll z.B. bei "www.xyz.de": Was interessiert das den DAU, der die (unvollständige) URL eingibt? Wer weiß schon (unter ganz normalen Anwendern) was das bedeutet? Dann ist es doch sinnvoll, das zu erkennen und http:// anzuhängen!?
Tom
Hi,
Du meinst Deine Lösung, oder? http://forum.de.selfhtml.org/archiv/2000_3/t21614.htm#a110363
ja. IIRC gab es damals ein Posting-Problem, welches einige Zeichen verfälscht hat; wenig später hat jemand anders dies korrigiert und das Posting wiederholt.
Wegen dem fehlenden Protokoll z.B. bei "www.xyz.de": Was interessiert das den DAU, der die (unvollständige) URL eingibt? Wer weiß schon (unter ganz normalen Anwendern) was das bedeutet? Dann ist es doch sinnvoll, das zu erkennen und http:// anzuhängen!?
Wenn Du das für sinnvoll erachtest, bitte. Das Fragezeichen macht in einer RegExp das vorherige Pattern optional (bei "*" und "+" hat es eine Sonderbedeutung).
Cheatah