3

我需要将包含长 url 的文本字符串转换为相同的字符串,但使用 tinyurl(使用 tinyurl api)。例如。转变

blah blah blah http://example.com/news/sport blah blah blah

进入

blah blah blah http://tinyurl.com/yaeocnv blah blah blah

如何做呢?

4

2 回答 2

3

为了缩短文本中任意数量的 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

于 2010-03-12T20:02:25.883 回答
0

要回答您关于如何使用 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);
于 2010-03-12T20:29:10.233 回答