2012-01-29 2 views
2
function getYoutubeVideoId($url) { 
    $urlParts = parse_url($url); 

    if($urlParts === false) 
     return false; 

    if(isset($urlParts['host']) && strtolower($urlParts['host']) === 'youtu.be') 
     return ltrim($urlParts['path'], '/'); 

    if(isset($urlParts['query'])) { 
     parse_str($urlParts['query'], $queryParts); 

     if(isset($queryParts['v'])) 
      return $queryParts['v']; 
    } 

    return false; 
} 

Эта функция отлично работает .. если вы не используете youtu.be/* без http://Эта функция работает только иногда

Почему это не работает, если это просто youtu.be или www.youtu.be?

ответ

0

Это похоже на работу:

function getYoutubeVideoId($url) { 
    $url = str_replace('http://', '', $url); 
    $url = str_replace('www.', '', $url); 
    $urlParts = parse_url($url); 

    if($urlParts === false){ 
     return false; 
    } 

    if(strstr($urlParts['path'], 'youtu.be')){ 
     return str_replace('youtu.be/', '', $urlParts['path']); 
    } 

    if(isset($urlParts['query'])) { 
     parse_str($urlParts['query'], $queryParts); 

     if(isset($queryParts['v'])){ 
      return $queryParts['v']; 
     } 
    } 

    return false; 
} 
0

Я просто использовать:

function getYoutubeId($url){ 
    $parsed = parse_url($url); 
    parse_str($parsed['query']); 
    return $v; 
} 

Не уверен, если это помогает ...

+0

Это не получит идентификатор видео из youtu.be ссылок. – Latox

4

Технически youtu.be/foo не URL. URL-адрес должен иметь схему в начале, а затем ://.

Поэтому причина, по которой он не работает, заключается в том, что вы вводите недопустимый ввод функции parse_url. Сначала вы должны очистить его.

1

Посмотрите, что он возвращается для этого входа:

php> =parse_url('youtu.be/id') 
array(
    "path" => "youtu.be/id", 
) 

Возможно, если host не установлен на результате, попробуйте повторить разбор с http:// предварённым.

0

Функция parse_url() специально не подтверждает подлинность URL-адреса, поэтому ваш код сломается.

Попробуйте использовать preg_match() и регулярное выражение для проверки подлинности.

0
if(
    (isset($urlParts['host']) && strtolower($urlParts['host']) === 'youtu.be')) 
    || 
    (!isset($urlParts['host'] && strstr($urlParts['path'],'/',true)=='youtu.be')