将文本转换为链接 - 忽略图像src

时间:2012-02-23 12:15:00

标签: php regex

我使用以下函数将文本链接转换为活动链接:

    function makeClickableLinks($text) {
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)','<a href="\\1">\\1</a>', $text);
    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)','\\1<a href="http://\\2">\\2</a>', $text);
    $text = eregi_replace('([_\.0-9a-z-]+@([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 - with没有什么好结果!

如何避免转换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";

1 个答案:

答案 0 :(得分:0)

你应该能够使用负面看法:

(?<!src=")

应排除img标记中的网址:

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