2012-02-23 2 views
2

Я использую следующие функции для преобразования текстовых ссылок на активные ссылки:Преобразовать текст ссылки - игнорировать изображение ЦСИ

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 ") приведенный выше код также попытается преобразовать src из img - без отличного результата!

Как избежать функции преобразования src тега img?

Я нашел решение:

$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

+0

спасибо - видимо, старый сценарий, который я использую :) – Christoffer

+1

@zvinx, если ваше решение работает, тогда опубликуйте его как ответ! –

ответ

0

Вы должны быть в состоянии использовать отрицательный взгляд позади:

(?<!src=") 

Это должно исключить URL-адреса в IMG теги:

$text = preg_replace('#(?<!src=")(((f|ht){1}tp://)[[email protected]:%_\+.~\#?&//=]+)#','<a href="\\1">\\1</a>', $text); 
Смежные вопросы