Возможный дубликат:
Заменить URL-адреса в тексте HTML-ссылками
Я передаю строковую переменную, которая содержит несколько URL-адресов, через функцию ниже, чтобы получить то же самое только с правильными ссылками HTML.
public function convertUrlsToLinks($text){ return preg_replace( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[az]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0" target="_blank">\0</a>', $text ); }
Это не работает вообще. Что мне не хватает?
Код должен пропускать существующие ссылки, значения src
<img>
(или что-то в этом роде).
если у вас уже есть html-документ, я ограничил распознавание URL-адресов
я придумал такое решение:
$string = 'lorem ipsum www.foo.bar dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet http://abc.de.fg.com?bar=baz'; $rx = '%[^"](?P<link>(?:https?://|www\.)(?:[-_a-z0-9]+\.)+(?:[az]{2,4}|museum/?)(?:[-_a-z0-9/]+)?(?:\?[-_a-z0-9+\%=&]+)?(?!</a)(\W|$))%ui'; echo preg_replace_callback($rx, function($matches) { return '<a href="'.$matches['link'].'">'.$matches['link'].'</a>'; }, $string).PHP_EOL;
строка вывода
lorem ipsum<a href="www.foo.bar ">www.foo.bar </a>dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet<a href="http://abc.de.fg.com?bar=baz">http://abc.de.fg.com?bar=baz</a>
Регулярное выражение должно работать как intendet, строка примера может помочь