让我们以这些URL为例:
这个PHP函数在第1种情况下不能正确地获得ID,但是在第2种情况下,情况1是非常常见的,任何东西都可以在YouTube ID后面出现。
/**
* get YouTube video ID from URL
*
* @param string $url
* @return string YouTube video id or FALSE if none found.
*/
function youtube_id_from_url($url) {
$pattern =
'%^# Match any YouTube URL
(?:https?://)? # Optional scheme. Either http or https
(?:www\.)? # Optional www subdomain
(?: # Group host alternatives
youtu\.be/ # Either youtu.be,
| youtube\.com # or youtube.com
(?: # Group path alternatives
/embed/ # Either /embed/
| /v/ # or /v/
| /watch\?v= # or /watch\?v=
) # End path alternatives.
) # End host alternatives.
([\w-]{10,12}) # Allow 10-12 for 11 char YouTube id.
$%x'
;
$result = preg_match($pattern, $url, $matches);
if (false !== $result) {
return $matches[1];
}
return false;
}我的想法是,一定有一种方法,我可以只是寻找"v=",无论它在哪里的网址,并采取字符之后。这样,就不需要复杂的RegEx了。这是离基地吗?对起点有什么想法吗?
发布于 2012-03-20 10:40:18
if (preg_match('/youtube\.com\/watch\?v=([^\&\?\/]+)/', $url, $id)) {
$values = $id[1];
} else if (preg_match('/youtube\.com\/embed\/([^\&\?\/]+)/', $url, $id)) {
$values = $id[1];
} else if (preg_match('/youtube\.com\/v\/([^\&\?\/]+)/', $url, $id)) {
$values = $id[1];
} else if (preg_match('/youtu\.be\/([^\&\?\/]+)/', $url, $id)) {
$values = $id[1];
}
else if (preg_match('/youtube\.com\/verify_age\?next_url=\/watch%3Fv%3D([^\&\?\/]+)/', $url, $id)) {
$values = $id[1];
} else {
// not an youtube video
}这就是我用来从youtube网址中提取id的方法。我认为它在所有情况下都有效。
注意,在视频的最后,$values = id
发布于 2012-03-07 02:35:10
而不是regex。我强烈推荐parse_url()和parse_str()
$url = "http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player";
parse_str(parse_url( $url, PHP_URL_QUERY ), $vars );
echo $vars['v']; 完成
发布于 2012-03-07 02:34:05
你可以用parse_url和parse_str
$query_string = parse_url($url, PHP_URL_QUERY);
parse_str($query_string);
echo $v;https://stackoverflow.com/questions/9594943
复制相似问题