0

我试图弄清楚如何从 facebook 页面获取页面名称,虽然我已经知道如何从http://www.facebook.com/pagename版本中获取它,但我无法弄清楚如何测试并从看起来更长的版本中获取它像这样http://www.facebook.com/pages/pagename/433425324544。如何测试以查看路径是否以开头,/pages以及如何使用一个函数从中提取页面名称。这是我用来以标准形式获取页面名称的方法。

function get_facebook_username( $facebook_url ) { 
$url = $facebook_url;
$result = preg_match("/(https|http)?:\/\/(www\.)?facebook\.com\/?([^\/]*)/", $url, $matches);
$fb_username = 'default value';
if($result == 1){
    $fb_username = $matches[3];
} else {
    return;
}

echo "$fb_username";
}

我找到了一种更好的方法来做到这一点,除非它会在 URL 位于其缩短版本中时从用户名中删除最后一个字母。例如。

//---short
$url = http://www.facebook.com/pagename
//---long
$url  = http://www.facebook.com/pages/pagename/7532527927346

<?php
  $url = $facebook_username;
  $path = parse_url($url, PHP_URL_PATH);
  $pathTrimmed = trim($path, 'pages/../0123456789');
  echo $pathTrimmed;
?>

//---short
 pagenam
//---long
 pagename

为什么简短版本缺少最后一个字母?

4

1 回答 1

1

我要解决的方法是explode使用以下代码将 url 放入数组中:

$url  = "http://www.facebook.com/pages/pagename/7532527927346";
$result = explode("/", $url);

你得到以下数组:

array(6) {
  [0]=>
  string(5) "http:"
  [1]=>
  string(0) ""
  [2]=>
  string(16) "www.facebook.com"
  [3]=>
  string(5) "pages"
  [4]=>
  string(8) "pagename"
  [5]=>
  string(13) "7532527927346"
}

然后一个简单的 if $result[3] == "pages" 将允许您检查 url 是否包含页面。

Ninja Edit 代替explode,您还可以使用preg_splitwhich 将不返回空数组元素:

$result = preg_split("~/~", $url, -1, PREG_SPLIT_NO_EMPTY); 
于 2012-05-15T12:04:44.830 回答