从YouTube URL获取视频ID


Grab the video ID from YouTube URL?

假设我有一个id列表:

http://www.youtube.com/watch?v=KMU0tzLwhbE
http://youtu.be/KMU0tzLwhbE
http://www.youtube.com/watch?v=KMU0tzLwhbE&featured=embedded

我需要一个函数来抓取ID: KMU0tzLwhbE

我现在正在处理这样的事情:

$url = "http://www.youtube.com/watch?v=KMU0tzLwhbE";
parse_str(parse_url($url, PHP_URL_QUERY ), $youtubeURL);
echo $youtubeURL['v'];

但是我需要它也为youtube工作。是链接。如有任何建议,我将不胜感激。

试试这样写:

$pattern = '/(?:(?:'?|&)v=|'/)([A-Za-z0-9]{11})/';
$url     = 'http://www.youtube.com/watch?v=KMU0tzLwhbE';
preg_match($pattern, $url, $matches);
echo $matches[1];

试试这个:

$video_url = "http://www.youtube.com/watch?v=KMU0tzLwhbE"; // http://youtu.be/KMU0tzLwhbE
$url_parts = parse_url($video_url);
if (isset($url_parts["query"]) && (strpos($url_parts["query"], "v") !== false)) {
  parse_str($url_parts["query"], $vars);
  // Handle full URLs with query string like 'http://www.youtube.com/watch?v=KMU0tzLwhbE'
  if (isset($vars["v"]) && $vars["v"]) {
    $video_code = $vars["v"];
  // Handle the new short URLs like 'http://youtu.be/KMU0tzLwhbE'
  } else if ($url_parts['path']) {
    $video_code = trim($url_parts['path'], '/');
  }
}

不要使用正则表达式。uri具有特定的语法,PHP为您提供了正确解析每个URL所需的工具。参见parse_url()和parse_str()。

<?php
function getYoutubeVideoId($url) {
    $urlParts = parse_url($url);
    if($urlParts === false || !isset($urlParts['host']))
        return false;
    if(strtolower($urlParts['host']) === 'youtu.be')
        return ltrim($urlParts['path'], '/');
    if(preg_match('/^(?:www'.)?youtube'.com$/i', $urlParts['host']) && isset($urlParts['query'])) {
        parse_str($urlParts['query'], $queryParts);
        if(isset($queryParts['v']))
            return $queryParts['v'];
    }
    return false;
}

第一组以(?:(?:'?|&)v=|youtu'.be'/)(.+?)(?:$|&)为模式的preg_match

我这么做是因为所有youtube视频的url都是一样的

$ytid = str_replace('http://www.youtube.com/watch?v=', '','http://www.youtube.com/watch?v=bZP4nUFVC6s' );

你也可以检查其他url的变化