【问题标题】:Grab the video ID only from youtube's URLs仅从 youtube 的 URL 获取视频 ID
【发布时间】:2011-05-02 00:04:53
【问题描述】:

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

例如,

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

有时 URL 会在 'v' 之后包含其他信息,例如

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

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

我只能想到用explode,

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

但是如何清理这样的 URL?

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

【问题讨论】:

  • 不是重复的,除非您假设用户在使用正则表达式解决方案,这不是解决此问题的最佳解决方案。跨度>
  • @meagar 但该问题也有由 Gumbo 提供的parse_url 解决方案,因此它可以作为副本使用。
  • @Pekka 他们在问不同的问题。正则表达式解决方案在另一个问题中被认为是正确的,似乎表明它确实是关于正则表达式,而不是关于找到视频 id 的 最佳 方法。
  • @meagar 是的,这很重要。我在这个问题上的回答也是如此:stackoverflow.com/questions/3737634 但现在我们有一个接受的答案实际上是正确的。耶! :)

标签: php youtube explode


【解决方案1】:

当可以通过专门构建的函数完成相同的事情时,您永远不应该使用正则表达式。

您可以使用 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;
}

【讨论】:

  • 这个解决方案的问题是,YouTube URL 至少可以说是不一致的。 YouTube 将接受至少 10 种不同的 URL 格式,其中只有少数使用 ?v= 格式提交视频 ID。大多数 URL 格式包含视频 ID 作为 URL 路径的一部分,如下所示:http://www.youtube.com/e/dQw4w9WgXcQ
猜你喜欢
  • 1970-01-01
  • 2012-05-22
  • 2011-03-28
  • 2017-08-17
  • 2019-12-07
  • 1970-01-01
  • 2011-07-22
  • 2011-11-05
相关资源
最近更新 更多