Получить идентификатор видео YouTube с URL w / PHP

Я пытаюсь создать функцию, которая вызывает значение из пользовательского поля WordPress («_videourl» для URL-адреса YouTube), а затем использует обрезку PHP, чтобы сократить ее до только видео-идентификатора YouTube. Я нашел функцию javascript, которая сокращает URL-адреса только для ID, но я понятия не имею, как я смог бы перевести это в php (функция ниже):

function youtubeIDextract(url) { var youtube_id; youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1"); return youtube_id; } 

Эта функция PHP будет использоваться внутри цикла, поэтому я думаю, что мне придется использовать переменные, но я действительно просто нуб, поэтому я понятия не имею, что делать. Может ли кто-нибудь помочь, делясь своим опытом в области кодирования, помогая мне создать функцию PHP?

EDIT: РЕШИТЬ

После некоторых экспериментов я нашел решение. Я хотел вернуться и опубликовать его так, чтобы другие, также нуждающиеся в помощи, могли где-то начать.

 function getYoutubeId($ytURL) { $urlData = parse_url($ytURL); //echo '<br>'.$urlData["host"].'<br>'; if($urlData["host"] == 'www.youtube.com') // Check for valid youtube url { $ytvIDlen = 11; // This is the length of YouTube's video IDs // The ID string starts after "v=", which is usually right after // "youtube.com/watch?" in the URL $idStarts = strpos($ytURL, "?v="); // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my // bases covered), it will be after an "&": if($idStarts === FALSE) $idStarts = strpos($ytURL, "&v="); // If still FALSE, URL doesn't have a vid ID if($idStarts === FALSE) die("YouTube video ID not found. Please double-check your URL."); // Offset the start location to match the beginning of the ID string $idStarts +=3; // Get the ID string and return it $ytvID = substr($ytURL, $idStarts, $ytvIDlen); return $ytvID; } else { //echo 'This is not a valid youtube video url. Please, give a valid url...'; return 0; } } 

Мне пришлось иметь дело с этим для PHP-класса, который я написал несколько недель назад, и закончил с регулярным выражением, которое соответствует любому типу строк: с или без схемы URL, с или без субдомена, строки URL youtube.com, URL youtu.be строк и обработки всех видов сортировки параметров. Вы можете проверить это в GitHub или просто скопировать и вставить блок кода ниже:

 /** * Check if input string is a valid YouTube URL * and try to extract the YouTube Video ID from it. * @author Stephan Schmitz <eyecatchup@gmail.com> * @param $url string The string that shall be checked. * @return mixed Returns YouTube Video ID, or (boolean) false. */ function parse_yturl($url) { $pattern = '#^(?:https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=|/watch\?.+&v=))([\w-]{11})(?:.+)?$#x'; preg_match($pattern, $url, $matches); return (isset($matches[1])) ? $matches[1] : false; } 

Чтобы объяснить регулярное выражение, вот разбросанная версия:

 /** * Check if input string is a valid YouTube URL * and try to extract the YouTube Video ID from it. * @author Stephan Schmitz <eyecatchup@gmail.com> * @param $url string The string that shall be checked. * @return mixed Returns YouTube Video ID, or (boolean) false. */ function parse_yturl($url) { $pattern = '#^(?:https?://)?'; # Optional URL scheme. Either http or https. $pattern .= '(?:www\.)?'; # Optional www subdomain. $pattern .= '(?:'; # Group host alternatives: $pattern .= 'youtu\.be/'; # Either youtu.be, $pattern .= '|youtube\.com'; # or youtube.com $pattern .= '(?:'; # Group path alternatives: $pattern .= '/embed/'; # Either /embed/, $pattern .= '|/v/'; # or /v/, $pattern .= '|/watch\?v='; # or /watch?v=, $pattern .= '|/watch\?.+&v='; # or /watch?other_param&v= $pattern .= ')'; # End path alternatives. $pattern .= ')'; # End host alternatives. $pattern .= '([\w-]{11})'; # 11 characters (Length of Youtube video ids). $pattern .= '(?:.+)?$#x'; # Optional other ending URL parameters. preg_match($pattern, $url, $matches); return (isset($matches[1])) ? $matches[1] : false; } 

Предполагая правильное выражение, вы можете использовать preg_replace

 $youtubeId = preg_replace('/^[^v]+v.(.{11}).*/', '$1', $url); 

Вы также можете быть заинтересованы в str_replace или substr качестве альтернативы.