X

Заменить все текстовые ссылки с помощью preg_replace

Как регуляркой найти в тексте, неоформленные url и вставить их как ссылку..

    $text='  
    <a href="http://ya.ru">Яндекс</a>  
    Текст http://ya.ru/index.php?param=1#anchor Текст  
    <a href="http://google.com">http://google.com</a>  
    <iframe src="http://google.com"></iframe>  
    ';  
      
    $text = preg_replace("#([^\"'=])((https?|ftp)://[^'\"<>\n\r ]+)(?!<\/a>)(['\"<>\n\r ])#i", '\\1<a href="\\2">\\2</a>\\4', $text);

результат:

    <a href="http://ya.ru">Яндекс</a>  
    Текст <a href="http://ya.ru/index.php?param=1#anchor">http://ya.ru/index.php?param=1#anchor</a> Текст  
    <a href="http://google.com">http://google.com</a>  
    <iframe src="http://google.com"></iframe>
Категории: PHP
Тэги: pcre

Комментарии (4)


  • $text = 'dsfsdfsdf http://www.site-name.ru/ ? dsfsdfsdf';

    $text = preg_replace("#([^\"'=])((https?|ftp)://[^'\"<>\n\r ]+)(?!<\/a>)(['\"<>\n\r ])#i", '\\1 \\2 <a href="\\2"title="Открыть Ссылку в Новом Окне" target="_blank" rel="nofollow">открыть</a>\\4', $text);

    echo $text;

    получится:

    dsfsdfsdf http://www.site-name.ru/ открыть ? dsfsdfsdf

    • Виталий спасибо за прекрасную функцию, оказывается всё работает very good

  • здравствуйте, помогите подправить ваш код, у меня есть ссылка в тексте:

    $detail_t="dsfsdfsdf http://www.site-name.ru/ ? dsfsdfsdf";

    При использовании кода

    $detail_t = preg_replace("#([^\"'=])((https?|ftp)://[^'\"\n\r ]+)(?!)(['\"\n\r ])#i", '\\1 \\2 <a href="\\2" title="Открыть Ссылку в Новом Окне" target="_blank" rel="nofollow">открыть</a>\\4', $detail_t);
    echo $detail_t;

    Получаю неправильную ссылку

    "http://www.site-name.ru/ ?"

    помогите подправить код - чтобы он ссылку брал до первого пробела.