1 | <?php |
---|
2 | |
---|
3 | $sentence = <<<EOF |
---|
4 | <p>http://example.com/ is a link. So is: http://example.com/</p> |
---|
5 | <p><a href="http://example.com/">example.com</a></p> |
---|
6 | <p>www.example.com/signup/</p> |
---|
7 | <p>ftp.example.org</p> |
---|
8 | <p>example@example.com</p> |
---|
9 | <p>ftp://example.com/foo/bar/</p> |
---|
10 | EOF; |
---|
11 | |
---|
12 | |
---|
13 | function make_clickable_old($ret) { |
---|
14 | $ret = ' ' . $ret . ' '; |
---|
15 | $ret = preg_replace("#([\s>])(https?)://([^\s<>{}()]+[^\s.,<>{}()])#i", "$1<a href='$2://$3' rel='nofollow'>$2://$3</a>", $ret); |
---|
16 | $ret = preg_replace("#(\s)www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[^ <>{}()\n\r]*[^., <>{}()\n\r]?)?)#i", "$1<a href='http://www.$2.$3$4' rel='nofollow'>www.$2.$3$4</a>", $ret); |
---|
17 | $ret = preg_replace("#(\s)([a-z0-9\-_.]+)@([a-z0-9\-_.]+)\.([^,< \n\r]+)#i", "$1<a href=\"mailto:$2@$3.$4\">$2@$3.$4</a>", $ret); |
---|
18 | $ret = trim($ret); |
---|
19 | return $ret; |
---|
20 | } |
---|
21 | |
---|
22 | function make_clickable_new($ret) { |
---|
23 | $ret = ' ' . $ret; |
---|
24 | $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "$1<a href='$2' rel='nofollow'>$2</a>", $ret); |
---|
25 | $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "$1<a href='http://$2' rel='nofollow'>$2</a>", $ret); |
---|
26 | $ret = preg_replace("#(\s)([a-z0-9\-_.]+)@([^,< \n\r]+)#i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $ret); |
---|
27 | $ret = substr($ret, 1); |
---|
28 | $ret = trim($ret); |
---|
29 | return $ret; |
---|
30 | } |
---|
31 | |
---|
32 | function make_clickable_mine($ret) { |
---|
33 | $ret = ' ' . $ret . ' '; |
---|
34 | $ret = preg_replace("#([\s\n>])(https?|ftp)://([^\s<>{}()]+[^\s.,<>{}()])#i", "$1<a href='$2://$3' rel='nofollow'>$2://$3</a>", $ret); |
---|
35 | $ret = preg_replace("#([\s\n>])(www|ftp)\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[^ <>{}()\n\r]*[^., <>{}()\n\r]?)?)#i", "$1<a href='http://$2.$3.$4$5' rel='nofollow'>$2.$3.$4$5</a>", $ret); |
---|
36 | $ret = preg_replace("#([\s\n>])([a-z0-9\-_.]+)@([a-z0-9\-_.]+)\.([^,< \n\r]+)#i", "$1<a href=\"mailto:$2@$3.$4\">$2@$3.$4</a>", $ret); |
---|
37 | $ret = preg_replace("#(<a [^>]+?>)<a [^>]+?>([^>]+?)</a></a>#i", "$1$2</a>", $ret); |
---|
38 | $ret = trim($ret); |
---|
39 | return $ret; |
---|
40 | } |
---|
41 | |
---|
42 | ?> |
---|
43 | |
---|
44 | <?php echo make_clickable_old($sentence); ?> |
---|
45 | |
---|
46 | |
---|
47 | <?php echo make_clickable_new($sentence); ?> |
---|
48 | |
---|
49 | |
---|
50 | <?php echo make_clickable_mine($sentence); ?> |
---|