0

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?

Casimir et Hippolyte
  • 88,009
  • 5
  • 94
  • 125
Johan
  • 883
  • 1
  • 9
  • 24
  • 1
    This is basically the exact same question as your last one: http://stackoverflow.com/questions/17864523/regex-not-getting-whole-link-at-special-characters The **EXACT** same concept holds. – Marc B Jul 25 '13 at 18:55
  • No it's not. There, it didn't get the whole `` tag, but now it is. Besides, I managed to solve the `_` and `&` problems. – Johan Jul 25 '13 at 18:57

1 Answers1

1
function superLinks($text)
{
    $ret = ' ' . $text;

    // http:// & https://
    $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
    // www & ftp
    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
    // mail
    $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
    // youtube
    $ret = preg_replace("#(^|[\n ])((youtube)\.[^ \"\n\r\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

Community
  • 1
  • 1
Maciej A. Czyzewski
  • 1,539
  • 1
  • 13
  • 24