我需要将包含长 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
如何做呢?
为了缩短文本中任意数量的 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);