в php, как мне использовать preg replace, чтобы превратить URL-адрес в tinyurl
Вопрос
Мне нужно преобразовать текстовую строку, содержащую длинный URL-адрес, в ту же строку, но с крошечным URL-адресом (с использованием API-интерфейса tinyurl).например.конвертировать
blah blah blah http://example.com/news/sport blah blah blah
в
blah blah blah http://tinyurl.com/yaeocnv blah blah blah
Как это можно сделать?
Решение
Чтобы сократить произвольное количество URL-адресов в вашем тексте, поместите API в функцию, которая принимает длинный URL-адрес и возвращает короткий URL-адрес.Затем примените эту функцию через PHP preg_replace_callback
функция для вашего текста.Это будет выглядеть примерно так:
<?php
function shorten_url($matches) {
// EDIT: the preg function will supply an array with all submatches
$long_url = $matches[0];
// API stuff here...
$url = "http://tinyurl.com/api-create.php?url=$long_url";
return file_get_contents($url);
}
$text = 'I have a link to http://www.example.com in this string';
$textWithShortURLs = preg_replace_callback('|http://([a-z0-9?./=%#]{1,500})|i', 'shorten_url', $text);
echo $textWithShortURLs;
?>
Не слишком рассчитывайте на этот шаблон, просто написал его на лету, без какого-либо тестирования, может быть, кто-то еще сможет помочь.Видеть http://php.net/preg-replace-callback
Другие советы
Чтобы ответить на ваш вопрос о том, как это сделать с помощью preg_replace, вы можете использовать e
модификатор.
function tinyurlify($href) {
return file_get_contents("http://tinyurl.com/api-create.php?url=$href");
}
$str = preg_replace('/(http:\/\/[^\s]+)/ie', "tinyurlify('$1')", $str);