YouTube URLs के विभिन्न formats से Video ID निकालने के विश्वसनीय तरीके।
विधि 1: parse_url() + parse_str() (सबसे विश्वसनीय, No Regex)
<?php
function getYouTubeId($url) {
$parsed = parse_url($url);
if (!$parsed) return null;
// youtube.com/watch?v=VIDEO_ID
if (isset($parsed['query'])) {
parse_str($parsed['query'], $query);
if (isset($query['v'])) return $query['v'];
}
// youtu.be/VIDEO_ID
if (isset($parsed['path'])) {
$path = trim($parsed['path'], '/');
if ($path) return $path;
}
// youtube.com/embed/VIDEO_ID
if (isset($parsed['path'])) {
$parts = explode('/', trim($parsed['path'], '/'));
if (isset($parts[1]) && $parts[0] === 'embed') {
return $parts[1];
}
}
return null;
}
// Test cases
$urls = [
'https://www.youtube.com/watch?v=VX96I7PO8YU',
'https://youtu.be/VX96I7PO8YU',
'https://www.youtube.com/embed/VX96I7PO8YU',
'https://www.youtube.com/v/VX96I7PO8YU',
'https://www.youtube.com/watch?v=VX96I7PO8YU&t=30s',
'https://m.youtube.com/watch?v=VX96I7PO8YU',
];
foreach ($urls as $url) {
echo $url . " → " . getYouTubeId($url) . "\n";
}
विधि 2: Regex Pattern (Single Function)
<?php
function getYouTubeIdRegex($url) {
$pattern = '/(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/';
if (preg_match($pattern, $url, $matches)) {
return $matches[1];
}
return null;
}
// Test
$testUrls = [
'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
'https://youtu.be/dQw4w9WgXcQ',
'https://www.youtube.com/embed/dQw4w9WgXcQ',
'https://www.youtube.com/v/dQw4w9WgXcQ',
'https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=share',
];
foreach ($testUrls as $url) {
echo getYouTubeIdRegex($url) . "\n"; // All output: dQw4w9WgXcQ
}
Regex Breakdown
/
(?: # Non-capturing group for URL prefixes
youtube(?:-nocookie)?\.com\/ # youtube.com/ or youtube-nocookie.com/
(?: # Various path patterns
[^\/\n\s]+\/\S+\/| # /user/name/ or similar
(?:v|e(?:mbed)?)\/| # /v/ or /embed/ or /e/
\S*?[?&]v= # ?v= or &v= anywhere
)
| # OR
youtu\.be\/ # youtu.be/
)
([a-zA-Z0-9_-]{11}) # Capture group: 11-char video ID
/x
विधि 3: Multiple Formats Handle करने वाला Robust Function
<?php
function extractYouTubeId(string $url): ?string {
// Clean URL
$url = trim($url);
// Pattern 1: Standard watch URLs
if (preg_match('/[?&]v=([a-zA-Z0-9_-]{11})/', $url, $m)) return $m[1];
// Pattern 2: youtu.be short URLs
if (preg_match('/youtu\.be\/([a-zA-Z0-9_-]{11})/', $url, $m)) return $m[1];
// Pattern 3: Embed URLs
if (preg_match('/\/embed\/([a-zA-Z0-9_-]{11})/', $url, $m)) return $m[1];
// Pattern 4: /v/ URLs (old format)
if (preg_match('/\/v\/([a-zA-Z0-9_-]{11})/', $url, $m)) return $m[1];
// Pattern 5: Shorts
if (preg_match('/\/shorts\/([a-zA-Z0-9_-]{11})/', $url, $m)) return $m[1];
return null;
}
// Validate video ID format
function isValidYouTubeId(string $id): bool {
return preg_match('/^[a-zA-Z0-9_-]{11}$/', $id) === 1;
}
URL Formats Supported
| Format | Example | Supported |
|---|---|---|
| Standard watch | youtube.com/watch?v=VIDEO_ID | ✅ |
| Short | youtu.be/VIDEO_ID | ✅ |
| Embed | youtube.com/embed/VIDEO_ID | ✅ |
| Legacy /v/ | youtube.com/v/VIDEO_ID | ✅ |
| Shorts | youtube.com/shorts/VIDEO_ID | ✅ |
| With parameters | ...?v=ID&t=30s&list=PL... | ✅ |
| Mobile | m.youtube.com/watch?v=ID | ✅ |
| NoCookie | youtube-nocookie.com/embed/ID | ✅ |
चेतावनी
Regex-based solutions brittle हो सकते हैं जब YouTube URL format बदलता है।
parse_url()+parse_str()approach अधिक robust है क्योंकि यह URL structure पर निर्भर करता है, specific patterns पर नहीं।