PHP Regex, чтобы получить идентификатор видео YouTube? - PullRequest
125 голосов
/ 03 августа 2010

Может кто-нибудь показать мне, как получить идентификатор youtube из URL независимо от того, какие другие переменные GET присутствуют в URL.

Используйте это видео, например: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
То есть между v= и до следующего &

Ответы [ 16 ]

4 голосов
/ 03 августа 2010
if (preg_match('![?&]{1}v=([^&]+)!', $url . '&', $m))
    $video_id = $m[1];
2 голосов
/ 22 апреля 2013

Я знаю, что название темы относится к использованию регулярного выражения, но, как говорится в цитате Завински, я действительно считаю, что избегать регулярных выражений здесь лучше Я бы порекомендовал эту функцию вместо:

function get_youtube_id($url)
{
    if (strpos( $url,"v=") !== false)
    {
        return substr($url, strpos($url, "v=") + 2, 11);
    }
    elseif(strpos( $url,"embed/") !== false)
    {
        return substr($url, strpos($url, "embed/") + 6, 11);
    }

}

Я рекомендую это, потому что идентификатор видео на YouTube всегда один и тот же, независимо от стиля URL, например,

, и это может иметь место для встроенных и iframe -данных вещей.

2 голосов
/ 15 февраля 2011
$vid = preg_replace('/^.*(\?|\&)v\=/', '', $url);  // Strip all meuk before and including '?v=' or '&v='.

$vid = preg_replace('/[^\w\-\_].*$/', '', $vid);  // Strip trailing meuk.
0 голосов
/ 05 июня 2019

Я думаю, вы пытаетесь это сделать.

<?php
  $video = 'https://www.youtube.com/watch?v=u00FY9vADfQ';
  $parsed_video = parse_url($video, PHP_URL_QUERY);
  parse_str($parsed_video, $arr);
?>
<iframe
src="https://www.youtube.com/embed/<?php echo $arr['v'];  ?>"
frameborder="0">
</iframe>
0 голосов
/ 07 мая 2019

Я использовал данные Ответ Шона , но обобщил и немного сократил регулярное выражение.Основное отличие от этого в том, что он не проверяет действительный URL-адрес Youtube, а просто ищет идентификатор видео.Это означает, что он все равно вернет идентификатор видео для www.facebook.com?wtv=youtube.com/v/vidid.Работает для всех тестовых случаев, но немного слабее.Следовательно, он выдаст ложное срабатывание для чего-то вроде https://www.twitter.com/watch?v=vidid.Используйте этот метод, если данные супер противоречивы, в противном случае используйте более конкретное регулярное выражение или parse_url() и parse_str().

preg_match("/([\?&\/]vi?|embed|\.be)[\/=]([\w-]+)/",$url,$matches);
print($matches[2]);
0 голосов
/ 19 января 2018

Просто нашел это онлайн на http://snipplr.com/view/62238/get-youtube-video-id-very-robust/

function getYouTubeId($url) {
// Format all domains to http://domain for easier URL parsing
str_replace('https://', 'http://', $url);
if (!stristr($url, 'http://') && (strlen($url) != 11)) {
    $url = 'http://' . $url;
}
$url = str_replace('http://www.', 'http://', $url);

if (strlen($url) == 11) {
    $code = $url;
} else if (preg_match('/http:\/\/youtu.be/', $url)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 1, 11);
} else if (preg_match('/watch/', $url)) {
    $arr = parse_url($url);
    parse_str($url);
    $code = isset($v) ? substr($v, 0, 11) : false;
} else if (preg_match('/http:\/\/youtube.com\/v/', $url)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 3, 11);
} else if (preg_match('/http:\/\/youtube.com\/embed/', $url, $matches)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 7, 11);
} else if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $url, $matches) ) {
    $code = substr($matches[0], 0, 11);
} else {
    $code = false;
}

if ($code && (strlen($code) < 11)) {
    $code = false;
}

return $code;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...