2012-01-29 80 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.bewww.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的鏈接獲得視頻ID。 – Latox 2012-01-29 01:06:31

4

從技術上講,youtu.be/foo不是一個URL。一個URL在開始時必須有一個方案,然後是://

所以它不工作的原因是因爲你給parse_url函數無效輸入。你必須先清理它。

1

看看它返回該輸入:

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

也許,如果host對結果沒有設置,嘗試重新解析與http://前綴。

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