в php, как мне использовать preg replace, чтобы превратить URL-адрес в tinyurl

StackOverflow https://stackoverflow.com/questions/2435321

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне нужно преобразовать текстовую строку, содержащую длинный 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top