仅从youtube的网址中获取视频ID

时间:2010-10-28 16:44:09

标签: php youtube explode

如何仅从youtube的网址中获取视频ID?

例如,

  

http://www.youtube.com/watch?v=aPm3QVKlBJg

有时网址包含“v”之后的其他信息,如

  

http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index

但我不想要其他信息,只需要视频ID。

我只能想到使用爆炸,

$url  = "http://www.youtube.com/watch?v=aPm3QVKlBJg";
$pieces = explode("v=", $url);

但如何清理这样的网址?

  

http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index

1 个答案:

答案 0 :(得分:10)

当通过专用函数完成同样的事情时,你永远不应该使用正则表达式。

您可以使用parse_url将URL分解为其细分,并使用parse_str将查询字符串部分分解为键/值数组:

$url = 'http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index'

// break the URL into its components
$parts = parse_url($url);

// $parts['query'] contains the query string: 'v=Z29MkJdMKqs&feature=grec_index'

// parse variables into key=>value array
$query = array();
parse_str($parts['query'], $query);

echo $query['v']; // Z29MkJdMKqs
echo $query['feature'] // grec_index

parse_str的替代形式将变量提取到当前范围。您可以将其构建为函数以查找并返回v参数:

// Returns null if video id doesn't exist in URL
function get_video_id($url) {
  $parts = parse_url($url);

  // Make sure $url had a query string
  if (!array_key_exists('query', $parts))
    return null;

  parse_str($parts['query']);

  // Return the 'v' parameter if it existed
  return isset($v) ? $v : null;
}