Cách lấy Youtube video ID từ URL

Cập nhật lần cuối 15/12/2025 by trong PHP vào 27/04/2015 có 6948 Views

Dưới đây là function giúp chúng ta lấy được youtube video id từ URL cho trước.

getyoutubevideoID

Function lấy Youtube Video ID

function getYouTubeVideoId($url)
{
    // Xử lý URL không hợp lệ
    $parsed = parse_url($url);
    if ($parsed === false || !isset($parsed['host'])) {
        return false;
    }

    $host = strtolower($parsed['host']);
    // Loại bỏ 'www.' và các subdomain
    $host = preg_replace('/^(www\.|m\.|music\.)?/', '', $host);
    
    $video_id = null;

    // Xử lý youtu.be
    if ($host === 'youtu.be') {
        if (isset($parsed['path'])) {
            $video_id = trim($parsed['path'], '/');
        }
    }
    // Xử lý youtube.com
    elseif ($host === 'youtube.com') {
        // Kiểm tra query string trước (v=xxx)
        if (isset($parsed['query'])) {
            parse_str($parsed['query'], $query);
            if (isset($query['v']) && !empty($query['v'])) {
                $video_id = $query['v'];
            }
        }
        
        // Nếu chưa có, kiểm tra path (/embed/xxx, /v/xxx, /shorts/xxx)
        if ($video_id === null && isset($parsed['path'])) {
            $path = trim($parsed['path'], '/');
            $segments = explode('/', $path);
            
            if (count($segments) >= 2 && in_array($segments[0], ['embed', 'v', 'shorts', 'e', 'live'])) {
                $video_id = $segments[1];
            }
        }
    } else {
        return false;
    }

    // Làm sạch video ID (loại bỏ timestamp và ký tự không hợp lệ)
    if ($video_id !== null) {
        // Loại bỏ phần sau dấu ? hoặc & (timestamp)
        $video_id = preg_replace('/[?&].*$/', '', $video_id);
        // Video ID YouTube chỉ chứa: chữ cái, số, dấu gạch ngang và gạch dưới, độ dài 11 ký tự
        if (preg_match('/^[a-zA-Z0-9_-]{11}$/', $video_id)) {
            return $video_id;
        }
    }

    return false;
}

Chạy thử

Code sau để test hàm lấy ID của video youtube phía trên.

$urls = array(
    'http://youtu.be/dQw4w9WgXcQ',
    'http://www.youtube.com/?v=dQw4w9WgXcQ',
    'http://www.youtube.com/?v=dQw4w9WgXcQ&feature=player_embedded',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=player_embedded',
    'http://www.youtube.com/v/dQw4w9WgXcQ',
    'http://www.youtube.com/e/dQw4w9WgXcQ',
    'http://www.youtube.com/embed/dQw4w9WgXcQ',
    'http://www.youtube.com/watch?t=40s&v=dQw4w9WgXcQ',
    'https://levantoan.com',
    'https://www.youtube.com/watch?v=u8nQa1cJyX8&list=RDu8nQa1cJyX8#t=45'
);
foreach ($urls as $url)
{
    echo sprintf('%s -> %s <br>' . PHP_EOL, $url, getYouTubeVideoId($url));
}

Kết quả

Sau khi có hàm get youtube video id và code để test chúng ta sẽ có kết quả như bên dưới.

Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.

Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều

http://youtu.be/dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/?v=dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/?v=dQw4w9WgXcQ&feature=player_embedded -> dQw4w9WgXcQ
http://www.youtube.com/watch?v=dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=player_embedded -> dQw4w9WgXcQ
http://www.youtube.com/v/dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/e/dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/embed/dQw4w9WgXcQ -> dQw4w9WgXcQ
http://www.youtube.com/watch?t=40s&v=dQw4w9WgXcQ -> dQw4w9WgXcQ
https://levantoan.com ->
https://www.youtube.com/watch?v=u8nQa1cJyX8&list=RDu8nQa1cJyX8#t=45 -> u8nQa1cJyX8

Chúc các bạn thành công!

5/5 - (5 votes)
  • Bình luận
Sản phẩm nổi bật của Toản
x