Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find url from string with php

Tags:

php

following code is used to find url from a string with php. Here is the code:

$string = "Hello http://www.bytes.com world www.yahoo.com";
preg_match('/(http:\/\/[^\s]+)/', $string, $text);
$hypertext = "<a href=\"". $text[0] . "\">" . $text[0] . "</a>";
$newString = preg_replace('/(http:\/\/[^\s]+)/', $hypertext, $string);
echo $newString;

Well, it shows a link but if i provide few link it doesn't work and also if i write without http:// then it doesn't show link. I want whatever link is provided it should be active, Like stackoverflow.com.

Any help please..

like image 991
user1161867 Avatar asked Feb 05 '12 18:02

user1161867


2 Answers

A working method for linking with http/https/ftp/ftps/scp/scps: $newStr = preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?&_/]+!', "<a href=\"\\0\">\\0</a>",$str);

I strongly advise NOT linking when it only has a dot, because it will consider PHP 5.2, ASP.NET, etc. links, which is hardly acceptable.

Update: if you want www. strings as well, take a look at this.

like image 74
axiomer Avatar answered Oct 19 '22 19:10

axiomer


If you want to detect something like stackoverflow.com, then you're going to have to check for all possible TLDs to rule out something like Web 2.0, which is quite a long list. Still, this is also going to match something as ASP.NET etc.

The regex would looks something like this:

$hypertext = preg_replace(
    '{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net)\b}mi',
    '<a href="http://$1$2$3">$1$2$3</a>',
    $text
);

This only matches domains ending in .com, .org and .net... as previously stated, you would have to extend this list to match all TLDs

like image 45
bummzack Avatar answered Oct 19 '22 19:10

bummzack