Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP缩短Facebook API中的URL文本_Php_Html_Facebook_Facebook Graph Api - Fatal编程技术网

使用PHP缩短Facebook API中的URL文本

使用PHP缩短Facebook API中的URL文本,php,html,facebook,facebook-graph-api,Php,Html,Facebook,Facebook Graph Api,我正在使用Facebook API在网页上显示来自特定Facebook帐户的帖子。当Facebook用户发布包含长URL文本链接的消息时(即

我正在使用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;
    }
linkify公共功能($ret){
$ret=preg#u replace(“#(^|[\n])([\w]+?:/[\w]+[^\”\n\r\t<]*)#“,“\\1”,$ret);
$ret=preg#u replace(“#(^|[\n])((www.ftp)\.[^\”\t\n\r<]*)#“,“\\1”,$ret);
$ret=preg\u replace(“#(^ |[\n])([a-z0-9&-\-\.]+?)@([\w\-]+\.([\w\-\.]+.*[\w]+)\i”,“\\1”、$ret);
返回$ret;
}
有人能帮我修改函数,这样它也可以截断任何长链接文本吗?我不是说截短整个消息,只是任何长文本的链接


谢谢

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

for each($matchedLink in $ret) {
  $ret = $ret.replace($matchedLink, "<a href='$matchedLink'>$(truncate($matchedLink))</a>";
}
每个($ret中的匹配链接){
$ret=$ret.replace($matchedLink,“”;
}

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

您已经有了一个用于查找URL的正则表达式,因此实现这一点很容易。下面是一个伪代码:

for each($matchedLink in $ret) {
  $ret = $ret.replace($matchedLink, "<a href='$matchedLink'>$(truncate($matchedLink))</a>";
}
每个($ret中的匹配链接){
$ret=$ret.replace($matchedLink,“”;
}

(很抱歉,我不是PHP程序员,也许可以用更聪明的方式来完成)

通过在我的函数中添加这一行来实现它:

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

$ret=preg\u replace(“/>”([:alnum:]+:\/\/)\124; www\)“{5,10}”([^[:space:]]*)([^[:space:]{5,10})([:alnum:][35;?\/&=])”\\ 3…\\5\\6通过将这一行添加到我的函数中,它开始工作了:

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

$ret=preg\u replace(“/>(([:alnum:]+:\/\/)| www\)([^[:space:]])“{5,10}”([^[:space:]]*)([^[:space:]{5,10})([:alnum:\/&=])”\\3…\\5\\6我没有剪切www。我无法修复布局,因为它是一个移动布局。当链接很长时,页面会被缩小,并且没有100%放大。它没有被破坏,只是不是我想要的显示方式。我不想限制文本,只想限制导致问题的url文本。我没有创建Facebook帖子,所以我我没有使用URL缩短器。我没有编写PHP代码。我不擅长正则表达式…这就是我在这里发布的原因。:)我会很感激这些代码。我没有删掉www。我无法修复布局,因为它是一个移动布局。当链接很长时,页面会被缩小,并且没有100%放大。它没有被破坏,只是不是我想要的显示方式。我不想限制文本,只想限制导致问题的url文本。我不会创建Facebook发帖,所以我不能使用URL缩短器。我没有编写PHP代码。我不擅长正则表达式…这就是我在这里发帖的原因。:)我将非常感谢代码。