Доброе утро!
Был поначалу такой метод для обработки ссылок в тексте:
public static function links($text, $remove = false)
{
$regex = '/(http|https|ftp|ftps)\:\/\/[a-zA-Zа-яА-Я0-9\-\.]+\.[a-zA-Zа-яА-Я]{2,6}(\/\S*)?/u';
if (preg_match($regex, $text, $url)) {
$link = $url[0];
$blank = " target='_blank'";
$parseUrl = explode('//', config('app.url'));
if (preg_match('/' . $parseUrl[1] . '/', $link)) {
$blank = null;
}
$replaceString = ! $remove ? "<a href='{$link}'{$blank}>{$link}</a>" : null;
$text = preg_replace($regex, $replaceString, $text);
}
return $text;
}
Проблема его была в том, что он все встречающиеся ссылки заменял на ту, которая встречается в 1 очередь, что логично, так как использую здесь просто preg_match(). Когда это заметил, то переделал метод. Теперь он такой:
public static function links($text, $remove = false)
{
$regex = '/(http|https|ftp|ftps)\:\/\/[a-zA-Zа-яА-Я0-9\-\.]+\.[a-zA-Zа-яА-Я]{2,6}(\/\S*)?/u';
if (preg_match_all($regex, $text, $matches)) {
$blank = " target='_blank'";
$parseUrl = explode('//', config('app.url'));
foreach ($matches[0] as $url) {
if (preg_match('/' . $parseUrl[1] . '/', $url)) {
$blank = null;
}
$replaceString = ! $remove ? "<a href='{$url}'{$blank}>{$url}</a>" : null;
$text = preg_replace($regex, $replaceString, $text);
}
}
return $text;
}
Теперь он все ссылки заменяет на ту, которая встречается в последнюю очередь.
Подскажите, пожалуйста, как сделать так, чтобы каждая ссылка заменялась на саму себя, обёрнутую в тег
<a>
?