我正在使用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编码器,也许它可以在一个更聪明的方式完成)