使URL可点击并缩短文本


Make urls clickable and shorten text

我有一个由用户生成的文本字符串。我需要将文本中的任何url转换为链接(url),以防锚文本很长(url)缩短它(与StackOverflow如何缩短url链接中的锚非常相似)。

我目前正在使用这段PHP代码将文本中的URL转换为链接:

return preg_replace(
        "/(?<!a href='")(?<!src='")((http|ftp)+(s)?:'/'/[^<>'s]+)/i",
        "<a href='"''0'" target='"blank'" rel='"nofollow'">''0</a>",$s);

这似乎适用于我测试过的大多数URL。

问题是,如果锚文本太长,我该如何缩短它?

例如。此文本:

这是一些带有链接的文本http://www.google.com/search?q=bla%20bla%20bla应该是可链接的。此url足够短,可以显示所有内容:http://bit.ly/blabla

应转换为:

Here is some text with a link <a href="https://www.google.com/search?q=bla%20bla%20bla">https://www.google.com/search...</a> that should be linkable. 
This url is short enough to show everything: <a href="http://bit.ly/blabla">http://bit.ly/blabla</a>

有什么想法可以在正则表达式匹配中操作文本吗?

一种方法是将URL文本放在<span style="overflow:hidden; width: 75px;">中。注意,在将链接插入DOM之前,您可能需要对其进行encodeURI()。