0

我正在使用这个正则表达式:

$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtube\.com))(?:https?://(?:www\.)?|www\.)[\w./=?#-%:-]+~i",
                       '<a target="_blank" href="$0">$0</a>', $string);

但我无法将此处的链接显示为可点击文本:

http://2.bp.blogspot.com/_mGMUxSe_j0I/R24t5bmY2nI/AAAAAAAAAs4/ndqvaJ1Z-oY/s400/chernobyl+-+multiple+sclerosis.jpg

它只是建立一个链接,直到+-+,它停止使其可点击。它再次变成纯文本。

http://chornobyl.in.ua/wp-content/uploads/photo-wolf-640×250.jpg

这不会在链接中显示640之后的内容(因此不会得到 x)。

如果我在其中添加 a+或 a x,它会获取包含链接[\w./=?#-%:-]整个</p>标签。老实说,我不知道该怎么办。有人可以帮我吗?

4

1 回答 1

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;
}

编辑:更好的解决方案使用 PHP 将纯文本 URL 转换为活动链接

于 2013-07-25T18:52:47.240 回答