PHP - Add link to a URL in a string
16,215
Solution 1
function processString($s) {
return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s);
}
Solution 2
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).
Solution 3
function processString($s){
return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s);
}
Found it here
Author by
AlexBrand
Updated on July 23, 2022Comments
-
AlexBrand almost 2 years
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; }
-
Narcolessico almost 12 yearsI think a "=" is missing: it fails when the url contains get parameters. I just added it after the "&" and now it works:
preg_replace('/https?:\/\/[\w\-\.!~?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s)
-
Roman S about 11 yearsYou forgot about addresses with # inside - so more correct version is
preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$text)
-
Rhys almost 10 yearsI just edited the answer to reflect these two additions.
-
Alcalyn over 9 yearsDo not forget to add the 'u' modifier if your string may contains utf8 characters
-
Yuv over 9 yearsThe same scenario I need it in Jquery/Javascript. Can anyone help ?
-
sNICkerssss over 6 yearsI add one more char "%". As result: '/https?:\/\/[\w\-%\.!~#?&=+*\'"(),\/]+/','<a href="$0">$0</a>'