2012-02-23 110 views
2

我使用下面的函数将文本链接转换为活动链接:将文本转换为链接 - 忽略图像的src

function makeClickableLinks($text) { 
    $text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)','<a href="\\1">\\1</a>', $text); 
    $text = eregi_replace('([[:space:]()[{}])(www.[[email protected]:%_\+.~#?&//=]+)','\\1<a href="http://\\2">\\2</a>', $text); 
    $text = eregi_replace('([_\.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})','<a href="mailto:\\1">\\1</a>', $text); 
    return $text; 
    } 

这工作得很好,但如果图像已经公布(IMG SRC =“HTTP ://www.yyy.com/zz.gif“)上面的代码也会尝试转换img的src - 没有很好的结果!

如何避免转换img标签的src的函数?

我已经找到了解决办法:

$text = preg_replace('/(?<!http:\/\/|https:\/\/|\"|=|\'|\'>|\">)(www\..*?)(\s|\Z|\.\Z|\.\s|\<|\>|,)/i',"<a href=\"http://$1\">$1</a>$2",$text); 
$text = preg_replace('/(?<!\"|=|\'|\'>|\">|site:)(https?:\/\/(www){0,1}.*?)(\s|\Z|\.\Z|\.\s|\<|\>|,)/i',"<a href=\"$1\">$1</a>$3",$text); 
echo "$text"; 
+3

请注意,不建议使用'ereg_ *'系列函数。您应该使用'preg_ *'家族。 – Sarfraz 2012-02-23 12:16:07

+0

谢谢 - 显然是我正在使用的一个旧脚本:) – Christoffer 2012-02-23 12:17:02

+1

@zvinx,如果您的解决方案可以工作,然后将其作为答案! – 2012-02-23 12:53:24

回答

0

您应该能够使用后面负的样子:

(?<!src=") 

这应该排除在IMG标记网址:

$text = preg_replace('#(?<!src=")(((f|ht){1}tp://)[[email protected]:%_\+.~\#?&//=]+)#','<a href="\\1">\\1</a>', $text);