使用PHP从Facebook API缩短URL文本


Use PHP to shorten URL text from Facebook API

我正在使用Facebook API来显示来自特定Facebook帐户的网页上的帖子。当Facebook用户发布包含长URL文本链接的消息时(即http://thisisreallylongandeventuallybreaksmyfrigginlayout ),它破坏了我的布局。

以下是我目前使用的PHP函数,用于从Facebook API获取帖子,并将任何url转换为HTML链接:

public function linkify($ret) {
    $ret = preg_replace("#(^|['n ])(['w]+?://['w]+[^ '"'n'r't< ]*)#", "''1<a href='"''2'">''2</a>", $ret);
    $ret = preg_replace("#(^|['n ])((www|ftp)'.[^ '"'t'n'r< ]*)#", "''1<a href='"http://''2'">''2</a>", $ret);
    $ret = preg_replace("#(^|['n ])([a-z0-9&'-_'.]+?)@(['w'-]+'.(['w'-'.]+'.)*['w]+)#i", "''1<a href='"mailto:''2@''3'">''2@''3</a>", $ret);
    return $ret;
    }

谁能帮助我改变功能,使它也截断任何长链接文本?我并不是说要截断整条消息,只是为了链接而截断任何长的文本。

谢谢!

通过将这一行添加到我的函数中来工作:

$ret = preg_replace("/>(([[:alnum:]]+:'/'/)|www'.)([^[:space:]]"."{5,10})([^[:space:]]*)([^[:space:]]{5,10})([[:alnum:]#?'/&=])"."</", ">''3...''5''6<", $ret);

您已经有了用于查找url的正则表达式,因此实现它是小菜一碟。下面是伪代码:

for each($matchedLink in $ret) {
  $ret = $ret.replace($matchedLink, "<a href='$matchedLink'>$(truncate($matchedLink))</a>";
}

(对不起,我不是一个PHP编码器,也许它可以在一个更聪明的方式完成)