[PHP] 使用 php 將 youtube 網址中的 id 過濾出來

如果我們要讓使用者可以輸入 youtube 網址後儲存到資料庫並嵌入在自己的網頁上,可以使用我們之前提過的 parse_url 的方式,把網址中的 v 的變數過濾出來像這樣:

$url="https://www.youtube.com/watch?v=3rwzYW8MDMM";
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
echo $my_array_of_vars['v'];

像這樣我們應該可以得到 id=3rwzYW8MDMM 的結果,可是取得 youtube 的網址還可能從短網址或嵌入的 code 拿到,這樣用這個變數的方法就會失效,還好有找到有人寫好的正規表達式的方法把網址過濾出來,可以參考以下寫法:

//常見的 youtube 網址類型
// http://youtu.be/dQw4w9WgXcQ
// http://www.youtube.com/embed/dQw4w9WgXcQ
// http://www.youtube.com/watch?v=dQw4w9WgXcQ
// http://www.youtube.com/?v=dQw4w9WgXcQ
// http://www.youtube.com/v/dQw4w9WgXcQ
// http://www.youtube.com/e/dQw4w9WgXcQ
// http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ
// http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ
// http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
// http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ

preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];

像這樣我們就可以拿到 youtube id 了,有需要的可以試試看。

參考出處:
Extract the YouTube Video ID from a URL in PHP