php - 如何在php中使用正则表达式从URL返回视频的主机名?

标签 php facebook youtube

有两个网址:

1- http://www.facebook.com/?v=107084586333124'

2- https://www.youtube.com/watch?v=Ws_RjMYE85o



如您所见,两个链接都包含?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视频链接时

(eg. http://www.facebook.com/?v=107084586333124')



总是返回 youtube 作为主机名。与我提交这样的链接不同:

https://www.facebook.com/LadBlab/videos/540736926073557/



它返回,facebook ,因此工作正常。

当用户提交这样的链接并且不将其与youtube混淆时,如何检查网址是否为Facebook视频?

http://www.facebook.com/?v=107084586333124'

最佳答案

你可以用这样的东西

$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/

相关文章:

php - Mysql 2 select all 语句无法正常工作

php - 如何使用 PHPExcel 合并 Excel 中的列

javascript - js 在 friend Facebook 墙上发布带有 taggable_friend ID 的帖子

php - Facebook 请求通过 cUrl 从 Https 转为 Http

android - ApplicationId 不能为空

php - 通过 htaccess 和分页限制获取值(value)

php - SQL - 如果该行不存在,则插入行并从其他行选择

youtube - youtube:在网站中使用youtube播放器

youtube - Youtube API获取所有播放列表项,而不是每个播放列表默认默认加载的最多26个

ruby-on-rails - 像在YouTube上一样,如何在用户评论中识别 '@'并建立链接