如何在 php 中使用正则表达式 return 来自 URL 的视频的主机名?
How to return the host name of the video from a URL using regex in php?
有两个url:
如您所见,两个 link 都包含 ?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] 应该 return 主机名(youtube、vimeo、facebook 等);
和 $exp[1] return 视频 ID。
该功能运行良好,但我遇到的问题是,当我提交包含 ?v=
的 facebook 视频 link 时
它总是 returns youtube 作为主机名。不像我提交 link 这样的:
it return facebook 因此工作正常。
当用户提交这样的 link 并且不与 youtube 混淆时,如何检查 url 是否为 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 分别应用于每个 link 以获取视频 ID。
有两个url:
如您所见,两个 link 都包含 ?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] 应该 return 主机名(youtube、vimeo、facebook 等);
和 $exp[1] return 视频 ID。
该功能运行良好,但我遇到的问题是,当我提交包含 ?v=
的 facebook 视频 link 时它总是 returns youtube 作为主机名。不像我提交 link 这样的:
it return facebook 因此工作正常。
当用户提交这样的 link 并且不与 youtube 混淆时,如何检查 url 是否为 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 分别应用于每个 link 以获取视频 ID。