getting youtube video id the PHP
get, parse-url, php, url, youtube
Solution
Like this:
$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0";
$video_id = explode("?v=", $link);
$video_id = $video_id[1];
Here is universal solution:
$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0&lololo";
$video_id = explode("?v=", $link); // For videos like http://www.youtube.com/watch?v=...
if (empty($video_id[1]))
$video_id = explode("/v/", $link); // For videos like http://www.youtube.com/watch/v/..
$video_id = explode("&", $video_id[1]); // Deleting any other params
$video_id = $video_id[0];
Or just use this regex:
(\?v=|/v/)([-a-zA-Z0-9]+)
Problem
I am currently writing a webapp in which some pages are heavily reliant on being able to pull the correct youtube video in - and play it. The youtube URLS are supplied by the users and for this reason will generally come in with variants one of them may look like this: http://www.youtube.com/watch?v=y40ND8kXDlg while the other may look like this: http://www.youtube.com/watch/v/y40ND8kXDlg Currently I am able to pull the ID from the latter using the code below: ``` function get_youtube_video_id($video_id) { // Did we get a URL? if ( FALSE !== filter_var( $video_id, FILTER_VALIDATE_URL ) ) { // http://www.youtube.com/v/abcxyz123 if ( FALSE !== strpos( $video_id, '/v/' ) ) { list( , $video_id ) = explode( '/v/', $video_id ); } // http://www.youtube.com/watch?v=abcxyz123 else { $video_query = parse_url( $video_id, PHP_URL_QUERY ); parse_str( $video_query, $video_params ); $video_id = $video_params['v']; } } return $video_id; } ``` How can I deal with URLS that use the `?v` version rather than the `/v/` version?