2012-11-24 57 views
1

我正在开展一个项目,但有些事情我无法解决。通过链接在网站上添加youtube视频

用户可以仅仅通过增加表单中的YouTube视频的链接,E.G YouTube视频添加到他们的个人资料:

Youtube链接:youtube.com/watch?v=9YgjZ4oPrj4

现在,一旦用户点击提交的视频已被嵌入。唯一的问题是,我只需要这部分9YgjZ4oPrj4嵌入 (见下面的代码)现在

<iframe width="560" height="315" src="http://www.youtube.com/embed/9YgjZ4oPrj4" frameborder="0" allowfullscreen></iframe> 

,如你所知,YouTube视频有不同类型的链接:

youtube.com/watch?v=9YgjZ4oPrj4 
youtu.be/9YgjZ4oPrj4 

我如何让这个工作? 它实际上是一样的Facebook使用

+1

例如使用正则表达式,但你没有尝试这样就没有我... – HamZa

+0

@Sam我看你不使用接受的答案,这是一个遗憾,这导致有你业障不良,没有收到任何答案。请看下面给出的两个答案,并接受一个答案。 – Flavius

+0

哦,我明白了,对不起,我不知道! –

回答

2

这里有一些代码将从字符串中提取YouTube ID。 注意我只是copied it from Forrst,但它应该做你想做的。

function youtube_id($url){ 
    $url = preg_replace('((http://)?(www\.)?(youtube\.com|youtu\.be)(/v/|/watch\?v=|/)([a-zA-Z0-9_-]*)(.*))',"$5",$url); 
    return (preg_match('(([a-zA-Z0-9_-]*){11,18})',$url) ? $url : ''); 
} 

以下网址已经过测试。

"http://www.youtube.com/watch?v=pkPgYbdQ1kQ&feature=feedu" 
"www.youtube.com/watch?v=pkPgYbdQ1kQ&feature=feedu" 
"youtube.com/watch?v=pkPgYbdQ1kQ&feature=feedu" 
"http://www.youtube.com/v/pkPgYbdQ1kQ&feature=feedu" 
"www.youtube.com/v/pkPgYbdQ1kQ&feature=feedu" 
"http://youtu.be/pkPgYbdQ1kQ" 
"youtu.be/pkPgYbdQ1kQ" 
+0

令人惊叹的,谢谢! –

+0

@SamHendrickx不只是说“谢谢”,实际上是赞成并接受答案。这就是事情在SO上的工作方式。 – Flavius

+0

但是我不能因为我的声望低于15而声名鹊起 –

1

你可以在地图上标注的主机名和封闭的:

$tubes = array(
    'youtube.com' => function($parsed_url) { 
    //$parsed_url contains data as returned by parse_url() 
    }, 
    'youtu.be' => function($parsed_url) { 
    // 
    }, 
); 

然后解析与正则表达式的内容,得到的网址,并通过中选取适当的通话将它们传递元素在你的地图中。

这种方法更通用,因为你不限于youtube,你可以很容易地为任何主机添加助手,包括vimeo和上帝知道什么,需要弹出。

样品工作实现,我会留下其余的你:

<?php 
$text = 'http://youtube.com/watch?v=9YgjZ4oPrj4 

http://youtu.be/9YgjZ4oPrj4'; 

$tubes = array(
    'youtube.com' => function($parse_url) { 
     parse_str($parse_url['query'], $query); 
     return "<iframe width='560' height='315' src='http://www.youtube.com/embed/$query[v]' frameborder='0' allowfullscreen></iframe>"; 
    }, 
); 

$replace = function($matches) use ($tubes) { 
    $url = parse_url($matches[0]); 
    if(isset($tubes[$url['host']])) { 
     return $tubes[$url['host']]($url); 
    } 
    return $matches[0]; 
}; 

$matches = preg_replace_callback('/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/', $replace, $text); 

var_dump($matches); 

如果你需要新的启发,然后把它们添加到$tubes地图。

相关问题