@Kaliha
Системный администратор хостинга

Как получить URL из текста и передать его другой функции?

Здравствуйте. Есть задачка: необходимо взять строку, найти в ней все URL, передать эти URL второй функции и вывод второй функции вставить в эту строку обратно. Обработкой URL занимается preg_replace, как можно модифицировать данную функцию для передачи найденой урлы в функцию shortUrl()?
function makeLink($string){

/*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2", shortUrl($string));
/*** make all URLs links ***/
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string);
/*** make all emails hot links ***/
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string);

return $string;
}
  • Вопрос задан
  • 372 просмотра
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Используй preg_replace_callback

$text = '
<a href="http://test1.ru">Test 1</a> text
<a href="http://test1.ru">Test 2</a> text
';

$text = preg_replace_callback('~http://~', function($match) {
    return $match[0] . 'www.'; 
}, $text);

echo $text;


твой вариант будет выглядеть примерно так:
$regexp = "/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i";
$string = preg_replace_callback($regexp, function($match){
    return $match[1] . "http://" . shortUrl($match[2]);
}, $string);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@entermix
function makeLink($string){

/*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2", shortUrl($string));
/*** make all URLs links ***/
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string);
/*** make all emails hot links ***/
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string);

shortUrl($string)
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы