如何检测URL的路径是否以某个单词开头

时间:2012-05-15 10:11:53

标签: url preg-match

我正在试图弄清楚如何从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";
}

我发现有一种更好的方法可以做到这一点我认为,除非它删除用户名中的最后一个字母,如果网址是缩短版本的话。例如。

//---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

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

1 个答案:

答案 0 :(得分: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”将允许你检查网址是否包含页面。

Ninja Edit 也可以使用preg_split来代替爆炸,它将不返回空数组元素:

$result = preg_split("~/~", $url, -1, PREG_SPLIT_NO_EMPTY);