用PHP解析youtube视频链接的视频ID最合理的方法是什么?
可能的重复项:用PHP解析youtube视频链接的视频ID最合理的方法是什么?,php,Php,可能的重复项: 如果输入如下所示: $input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music'; 最后我想说: $result = 'ALph_u2iee8'; 在PHP中最合理的方法是什么?PHP已经有了处理这个问题的函数。 $input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music
如果输入如下所示:
$input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';
最后我想说:
$result = 'ALph_u2iee8';
在PHP中最合理的方法是什么?PHP已经有了处理这个问题的函数。
$input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';
$queryString = parse_url($input, PHP_URL_QUERY);
$queries = array();
parse_str($queryString, $queries);
echo $queries['v'];
有些人会说使用正则表达式,但对于这么简单的事情,使用子字符串更快更好 这应该可以做到:
$input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';
$start = strpos($input, '?v=');
$length = strpos($input, '&', $start + 1) - $start;
echo substr($input, $start + 3, $length);
当然,parse_url/parse_str是正确的方法。当我试图从url获取youtube视频ID时,我使用此函数
function get_youtube_id_from_url( $url ) {
preg_match('/[\\?&]v=([^&#]*)/si', $url, $matches );
return !empty( $matches ) ? $matches[1] : false;
}
在局部范围内设置变量并不是很好的做法。我将在调用
parse_str()
时使用第二个参数。当然,你可以调整parse_url()
,还可以检查域名是否匹配。@Matthew我同意你的意见后对其进行了更改。我不投重复票:这个问题的格式总是相同的,另一个有多种格式,并从字符串解析链接。这是一个更加简洁的问题,它是一个重复的问题。你(@Levi)真的应该把你的答案贴在里面。当PHP具有易于理解的任务函数时,使用一个巨大的正则表达式是疯狂的。我重复我的立场:这不是重复。这个问题涉及youtube url的任何格式,而这个问题涉及一种格式。仅仅因为它是一个子集问题,并不意味着它应该得到一个子集或重复的答案。对于指定的格式,有一个非常定制的答案。我的答案确实比@Levi Morrison的答案要长5倍