AlexBrand
AlexBrand

Reputation: 12401

PHP - Add link to a URL in a string

I have a function that will add the <a href> tag before a link and </a> after the link. However, it breaks for some webpages. How would you improve this function? Thanks!

function processString($s) 
{
    // check if there is a link

    if(preg_match("/http:\/\//",$s))
    {
        print preg_match("/http:\/\//",$s);


        $startUrl =  stripos($s,"http://");

        // if the link is in between text
        if(stripos($s," ",$startUrl)){
            $endUrl = stripos($s," ",$startUrl);
        }
        // if link is at the end of string
        else {$endUrl = strlen($s);}

        $beforeUrl = substr($s,0,$startUrl);
        $url = substr($s,$startUrl,$endUrl-$startUrl);
        $afterUrl = substr($s,$endUrl);

        $newString = $beforeUrl."<a href=\"$url\">".$url."</a>".$afterUrl;

        return $newString;
    }

    return $s;
}

Upvotes: 9

Views: 17348

Answers (3)

bcosca
bcosca

Reputation: 17555

function processString($s) {
    return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s);
}

Upvotes: 21

egze
egze

Reputation: 3236

function processString($s){
  return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s);
}

Found it here

Upvotes: 1

tdammers
tdammers

Reputation: 20721

It breaks for all URLs that contain "special" HTML characters. To be safe, pass the three string components through htmlspecialchars() before concatenating them together (unless you want to allow HTML outside the URL).

Upvotes: 1

Related Questions