Intereting Posts
Заголовок CORS «Нет» Access-Control-Allow-Origin 'присутствует », но есть Маршрутные столкновения в Ларавеле 4 Php force Загрузка – загрузка поврежденного файла php: Как сохранить сокет клиента (не закрыт), так что дополнительный скрипт может получить его для отправки ответа? PHP – использование выпадающего списка для изменения темы сайта PHP для iPad или другие решения Данные формы и предварительный просмотр изображения после отправки формы Как проверить, вошел ли пользователь в php? Может кто-нибудь помочь мне отправить почту в PHP? Прогресс Ajax с сеансом PHP Обновите или создайте постоянный токен доступа к Facebook, чтобы опубликовать страницу приложения Делает ini_set ('session.save_path', 'custom path'); Эффект уборщика мусора? javascript keep checkbox установлен после обновления страницы Как добавить водяной знак в существующий файл PDF с помощью PHP? Загрузите файл с помощью file_get_contents

PHP Преобразование всех URL-адресов в html-ссылки

Возможный дубликат:
Заменить 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-адресов

  • не начинать с "
  • начать с http или www

я придумал такое решение:

 $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, строка примера может помочь