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.be
或www.youtu.be
?
答案 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;
}