Преобразовать url из текста в активную ссылку на php

Преобразовать url из текста в активную ссылку на phpВ этой статье я хочу показать пару интересных регулярных выражений. Эти «регулярки» заменяют во всем тексте урлы, на активные ссылки. То есть если в тексте встретится урл, например www.vk-book.ru, то с помощью регулярных выражений ссылка будет заменена на активную — станет кликабельна и будет перенаправлять на соответствующий сайт. Ниже находится сам код с примером его использования:

// пример использования
$text = "
    Пример текста с ссылками. Например, ссылка на яндекс - http://yandex.ru или вот еще на Вконтакте - www.vk.com. Вот так!
";
echo changeTextToLink($text);

/**
* Преобразование url из текста в активную ссылку
*
* @param string $text - входящий текст
*
* @return string - текст с замененными ссылками
*/
function changeTextToLink($text){
    $text = preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*[^ \.])/is", "$1$2<a href=\"http://$3\" >$3</a>", $text);
    $text = preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*[^ \.])/is", "$1$2<a href=\"$3\" >$3</a>", $text);
    return($text);
}

Обновление 2018.03.17: отредактировал регулярку, чтобы точка в конце ссылки не подставлялась в урл.

Рассказать друзьям:


Оценить:
(3 оценок, среднее: 5,00 из 5)

Преобразовать url из текста в активную ссылку на php: 7 комментариев

  1. Наконец-то нашел рабочий код.
    Только нужно его доработать, так как в том пример который приводите ссылку ВК он берет вместе с точкой!

    1. Только сегодня заметил комментарий :)
      Подправил регулярку, теперь последняя точка игнорируется и не подставялется в урл

  2. Спасибо за скрипт, работает, но почему-то не преобразовывает мой сайт — https://studizba.com, прямо вот не понимаю почему =( Причём пишу текст, к примеру «Пример текста с ссылками. Например, ссылка на яндекс — http://yandex.ru или вот еще https://studizba.com. Вот так!» — яндекс преобразуется, а студизба нет… Подскажите что не так плиииииииз!!!

  3. У меня не сработало(
    Работает это
    preg_replace('(http[s]?:\/\/[\w+?\.\w+]+[a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\:\;\'\.\/]+[\.]*[a-zA-Z0-9\/]+)', "$0", $text)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code