有两个网址:
如您所见,两个链接都包含?v =.............。
我正在使用一个函数来检索视频ID和主机名称(youtube,facebook等)。
我正在使用此功能获取ID和主机名
function get_video_id($url){
$video_id = "";
//YOUTUBE
if(preg_match('#(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+#', $url, $videoid)){
if(strlen($videoid[0])) {
$video_id = 'youtube:_:'.$videoid[0];
}
}
//VIMEO
if(preg_match('#(https?://)?(www.)?(player.)?vimeo.com/([a-z]*/)*([0-9]{6,11})[?]?.*#', $url, $videoid)){
if(strlen($videoid[5])) {
$video_id = 'vimeo:_:'.$videoid[5];
}
}
// Facebook
if(preg_match("~/videos/(?:t\.\d+/)?(\d+)~i", $url, $videoid)){
if(strlen($videoid[0])) {
$video_id = 'facebook:_:'.$videoid[1];
}
}
return $video_id;
}
$exp = explode(':_:',get_video_id($_POST['video_url']));
echo $exp[0] .'=>'.$exp[1];
$ exp [0] 应该返回主机名(youtube,vimeo,facebook .... etc);
和 $ exp [1] 返回视频ID。
该功能运行正常,但是遇到的问题是,当我提交包含?v = 的facebook视频链接时
总是返回 youtube 作为主机名。与我提交这样的链接不同:
它返回,facebook ,因此工作正常。
当用户提交这样的链接并且不将其与youtube混淆时,如何检查网址是否为Facebook视频?
最佳答案
你可以用这样的东西
$url = 'http://facebook.com/?v=4654654';
if(strpos($url, 'facebook') != FALSE) {
//facebook link
} else if(strpos($url, 'youtube') != FALSE) {
//youtubelink
} else {
//someother link
}
然后将preg_match分别应用于每个链接以获取视频ID。
关于php - 如何在php中使用正则表达式从URL返回视频的主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32181530/