php用全新的url替换字符串中的url

时间:2013-10-14 08:56:08

标签: php url

我目前正在开发一个简短的url脚本来与twitter合作。

目前我正在将我想要的推文文本输入带有长网址的文本区域。到目前为止,我有以下检测网址:

$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
if ( preg_match( $regex, $text, $url ) ) { // $url is now the array of urls
   echo $url[0];
}

当输入推文时,它看起来像这样:

hi here is our new product, check it out: www.mylongurl.com/this-is-a-very-long-url-and-needs-to-be-shorter

然后我会生成一些随机字符以附加到新网址的末尾,因此最终会出现这样的情况:shorturl.com/ghs7sj。

单击时,请访问www.mylongurl.com/this-is-aver-long-url-and-needs-to-be-shorter,将其重定向到www.mylongurl.com/this-is-aver-long-url-and-needs-to-be-shorter。一切正常。

我的问题是推文文字仍然包含长网址。有没有办法可以用短的长网取代长网址?我需要一些新代码吗?或者我可以调整上述内容吗?

我希望的结果是:

 hi here is our new product, check it out: shorturl.com/ghs7sj

这是基于wordpress所以所有信息当前都存储在posts和post_meta表中。请注意,推文中只会有1个网址。

2 个答案:

答案 0 :(得分:3)

你能使用PHP的str_replace()功能吗?像

这样的东西
str_replace($url, $short_url, $text);

答案 1 :(得分:1)

您可以使用preg_replace_callback()

在回调函数中进行替换
$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
$text = preg_replace_callback($regex, function($url) { 
    // do stuff with $url[0] here
    return make_short_url($url[0]);
}, $text);