php - 获取 youtube 视频 ID PHP

标签 php url youtube get parse-url

我目前正在编写一个网络应用程序,其中一些页面严重依赖于能够拉入正确的 youtube 视频并播放它。 youtube URLS 由用户提供,因此通常会带有变体,其中一个可能如下所示:

http://www.youtube.com/watch?v=y40ND8kXDlg

另一个可能是这样的:

http://www.youtube.com/watch/v/y40ND8kXDlg

目前我可以使用下面的代码从后者中提取 ID:

function get_youtube_video_id($video_id)
{

    // Did we get a URL?
    if ( FALSE !== filter_var( $video_id, FILTER_VALIDATE_URL ) )
    {

        // http://www.youtube.com/v/abcxyz123
        if ( FALSE !== strpos( $video_id, '/v/' ) )
        {
            list( , $video_id ) = explode( '/v/', $video_id );
        }

        // http://www.youtube.com/watch?v=abcxyz123
        else
        {
            $video_query = parse_url( $video_id, PHP_URL_QUERY );
            parse_str( $video_query, $video_params );
            $video_id = $video_params['v'];
        }

    }

    return $video_id;

}

如何处理使用 ?v 版本而不是 /v/ 版本的 URL?

最佳答案

像这样:

$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0";
$video_id = explode("?v=", $link);
$video_id = $video_id[1];

这是通用解决方案:

$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0&lololo";
$video_id = explode("?v=", $link); // For videos like http://www.youtube.com/watch?v=...
if (empty($video_id[1]))
    $video_id = explode("/v/", $link); // For videos like http://www.youtube.com/watch/v/..

$video_id = explode("&", $video_id[1]); // Deleting any other params
$video_id = $video_id[0];

或者只使用这个正则表达式:

(\?v=|/v/)([-a-zA-Z0-9]+)

关于php - 获取 youtube 视频 ID PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973520/

相关文章:

web - 有没有办法在没有信箱的情况下获得高分辨率的 YouTube 视频缩略图?

php - Crypt() 用户 ID 为字母数字,用于 API 请求 URL

php - codeigniter php - 序列化数组

php - 如何在Codeigniter中创建两个父 Controller ?

python - Django slugified urls - 如何处理冲突?

html - 从 iOS 中的下载字符串中提取 URL

Perl:在查询字符串中传递 URL

php - 如何在 PHP 中加入文件系统路径字符串?

youtube - 使用 Google YouTube V3 API 未检索到回复或未检索到所有评论

javascript - Youtube Iframe : onYouTubePlayerAPIReady() not called