【问题标题】:Use PHP to shorten URL text from Facebook API使用 PHP 从 Facebook API 缩短 URL 文本
【发布时间】:2011-12-19 23:45:20
【问题描述】:

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

这是我目前用来从 Facebook API 获取帖子并将任何 URL 转换为 HTML 链接的 PHP 函数:

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;
    }

谁能帮我更改函数,以便它也截断任何长链接文本?我说的不是截断整条消息,只是截断链接的任何长文本。

谢谢!

【问题讨论】:

    标签: php html facebook facebook-graph-api


    【解决方案1】:

    通过将此行添加到我的函数中使其工作:

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

    【讨论】:

      【解决方案2】:

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

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

      (对不起,我不是PHP程序员,也许可以用更聪明的方式完成)

      【讨论】:

      • 我没有删掉 www。我无法修复布局,因为它是移动布局。当链接真的很长时,页面会缩小并且不是 100% 放大。它没有损坏,只是不是我想要的显示方式。我不想限制文本,只限制导致问题的 url 文本。我没有创建 Facebook 帖子,所以我不能使用 URL 缩短器。
      • PHP 代码不是我写的。我不擅长正则表达式……这就是我在这里发帖的原因。 :) 我会很感激代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      相关资源
      最近更新 更多