Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP解析youtube视频链接的视频ID最合理的方法是什么?_Php - Fatal编程技术网

用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倍