此功能有时只能工作

时间:2012-01-29 01:01:43

标签: php

function getYoutubeVideoId($url) {
    $urlParts = parse_url($url);

    if($urlParts === false)
        return false;

    if(isset($urlParts['host']) && strtolower($urlParts['host']) === 'youtu.be')
        return ltrim($urlParts['path'], '/');

    if(isset($urlParts['query'])) {
        parse_str($urlParts['query'], $queryParts);

        if(isset($queryParts['v']))
            return $queryParts['v'];
    }

    return false;
}

此功能效果很好..除非您使用youtu.be/*而不使用http://

如果它只是youtu.bewww.youtu.be

,为什么它不起作用

6 个答案:

答案 0 :(得分:4)

从技术上讲,youtu.be/foo不是网址。 URL必须在开头有一个方案,然后是://

所以它不起作用的原因是因为你给parse_url函数无效输入。你必须先清理它。

答案 1 :(得分:1)

查看该输入返回的内容:

php> =parse_url('youtu.be/id')
array(
  "path" => "youtu.be/id",
)

如果未在结果上设置host,请尝试使用前置http://重新解析。

答案 2 :(得分:0)

我只是使用:

function getYoutubeId($url){
    $parsed = parse_url($url);
    parse_str($parsed['query']);
    return $v;
}

不确定这是否有帮助...

答案 3 :(得分:0)

parse_url()函数专门不验证网址,这就是您的代码会中断的原因。

尝试使用preg_match()和正则表达式首先验证网址。

答案 4 :(得分:0)

 if(
    (isset($urlParts['host']) && strtolower($urlParts['host']) === 'youtu.be'))
    ||
    (!isset($urlParts['host'] && strstr($urlParts['path'],'/',true)=='youtu.be')

答案 5 :(得分:0)

这似乎有效:

function getYoutubeVideoId($url) {
    $url = str_replace('http://', '', $url);
    $url = str_replace('www.', '', $url);
    $urlParts = parse_url($url);

    if($urlParts === false){
        return false;
    }

    if(strstr($urlParts['path'], 'youtu.be')){
        return str_replace('youtu.be/', '', $urlParts['path']);
    }

    if(isset($urlParts['query'])) {
        parse_str($urlParts['query'], $queryParts);

        if(isset($queryParts['v'])){
            return $queryParts['v'];
        }
    }

    return false;
}