如何使用PHP从嵌入URL获取视频id?

如何使用PHP从嵌入URL获取视频id?,php,Php,我有一个像这样的youtube嵌入URL <object width="420" height="315"> <param name="movie" value="//www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US"></param> <param name="allowFullScreen" value="true"></param><param name="allows

我有一个像这样的youtube嵌入URL

<object width="420" height="315">
<param name="movie" value="//www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US"></param>
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="//www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true">
</embed></object>


现在我想用PHP获取视频的ID。请有人帮忙

您可以使用类似的方法获取youtube链接的ID:

$your_url='http://www.youtube.com/watch?var1=blabla#v=GvJehZx3eQ1$var2=bla';

function get_youtube_id_from_url($url){
    if (stristr($url,'youtu.be/'))
        { preg_match('/(https:|http:|)(\/\/www\.|\/\/|)(.*?)\/(.{11})/i', $url, $final_ID); return $final_ID[4]; }
    else 
        { preg_match('/(https:|http:|):(\/\/www\.|\/\/|)(.*?)\/(embed\/|watch\?v=|(.*?)&v=|v\/|e\/|.+\/|watch.*v=|)([a-z_A-Z0-9]{11})/i', $url, $IDD); return $IDD[6]; }
}

echo get_youtube_id_from_url($your_url);
输出:

GvJehZx3eQ1
www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US
下面是从
embed
标签获取youtube链接的方法:

$sLink = "<embed src=\"www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US\"></embed>";
preg_match('/< *embed[^>]*src *= *["\']?([^"\']*)/i', $sLink,$aMatch);
echo $aMatch[1];
您必须使用一点逻辑来使这两个函数一起工作:)但这是一个很好的起点

请记住,如果将表达式括在双引号中,则需要使用
\
进行转义

p.S:从某处获得了第一个函数,只是不记得在哪里

编辑

您还可以使用
Javascript
实现此目的:

var re = /(\?v=|\/\d\/|\/embed\/|\/v\/|\.be\/)([a-zA-Z0-9\-\_]+)/;
var urlArr = [
    "http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index",
    "http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o",              
];
for (var i = 0; i < urlArr.length; i++) {
    alert(urlArr[i].match(re)[2]);
}
var re=/(\?v=\/\d\/\embed\/\\/v\/\\.be\/)([a-zA-Z0-9\-\\+);
var urlArr=[
"http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index",
"http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-“维奥”,
];
对于(var i=0;i
JSFiddle:

既然您正在处理标记,您也可以使用
DOMDocument
来获取该值。您可以这样做:

$html = '<object width="420" height="315"><param name="movie" value="//www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="//www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
$youtube_link = $dom->getElementsByTagName('embed')->item(0)->getAttribute('src');
echo $youtube_link; // //www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US
$html='';
$dom=新的DOMDocument();
libxml\u使用\u内部错误(true);
$dom->loadHTML($html);
libxml_clear_errors();
$youtube_link=$dom->getElementsByTagName('embed')->item(0)->getAttribute('src');
echo$youtube_link;///www.youtube.com/v/whTwjG4ZIJg?version=3&hl=en_US