This question already has an answer here:
I am using this regex:
$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtube\.com))(?:https?://(?:www\.)?|www\.)[\w./=?#-%:-]+~i",
'<a target="_blank" href="$0">$0</a>', $string);
But I can't get it to show the link here as clickable text:
http://2.bp.blogspot.com/_mGMUxSe_j0I/R24t5bmY2nI/AAAAAAAAAs4/ndqvaJ1Z-oY/s400/chernobyl+-+multiple+sclerosis.jpg
It just makes a link until the +-+, where it stops makin it clickable. It becomes plain text once again.
http://chornobyl.in.ua/wp-content/uploads/photo-wolf-640×250.jpg
This don't show the things after 640 in a link (so does not get the x).
If I add a +
or a x
in [\w./=?#-%:-]
, it gets my whole </p>
tag in which the link is wrapped. I honestly don't know what to do. Can somone help me out?
</div>
function superLinks($text)
{
$ret = ' ' . $text;
// http:// & https://
$ret = preg_replace("#(^|[
])([\w]+?://[^ \"
\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
// www & ftp
$ret = preg_replace("#(^|[
])((www|ftp)\.[^ \"\t
<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
// mail
$ret = preg_replace("#(^|[
])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
// youtube
$ret = preg_replace("#(^|[
])((youtube)\.[^ \"
\t<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
$ret = substr($ret, 1);
return $ret;
}
EDIT: Better solution Turn Plain Text URLs into Active Links using PHP