Есть вот такой код, он работает, но если есть <br />, то к url прибавляются частички от <br />
$new_text = preg_replace("~(http|https|ftp|ftps)://(.*?)(\s|\n|[,.?!](\s|\n)|$)~", '<a href="$1://$2">$1://$2</a>$3', $text);
return $new_text;
Например, ссылка https://www.google.com/ Если она написана в тексте вот так
https://www.google.com/
То все работает.
Если она написана в тексте вот так
Найти в Google - https://www.google.com/ Сайт Google
То все работает.
Если она написана в тексте вот так
Найти в Google https://www.google.com/<br/>
Загуглить
То ссылка поглощает частички
и все что идет после нею.
Как это исправить? И возможно ли сделать переадресацию с ссылки на определенную страницу, чтобы проверить допустим ли этот домен для перехода и т. д.
Желательно с объяснением.
Сделайте ограничение на угловые скобки (и пробелы):
$text = 'Найти в Google https://www.google.com/<br/>Загуглить';
$patt = '~(?:https?|ftps?)://[^<>\s]+~';
$repl = '<a href="$0">$0</a>';
$newText = preg_replace($patt, $repl, $text);
echo $newText;
Результат:
Найти в Google <a href="https://www.google.com/">https://www.google.com/</a><br/>Загуглить
Продвижение своими сайтами как стратегия роста и независимости