Php 通过链接在网站上添加youtube视频

Php 通过链接在网站上添加youtube视频,php,hyperlink,youtube,embed,Php,Hyperlink,Youtube,Embed,我正在做一个项目,有一件事我不能完全解决 用户只需在表单中添加YouTube剪辑的链接,即可将YouTube视频添加到其个人资料中,例如: Youtube链接:Youtube.com/watch?v=9YgjZ4oPrj4 现在,一旦用户单击submit,就必须嵌入视频。唯一的问题是我只需要这个部分9YgjZ4oPrj4来嵌入 (见下面的代码) 我怎样才能让它工作? 它实际上与Facebook使用的相同您可以构建主机名和闭包的地图: $tubes = array( 'youtube.com'

我正在做一个项目,有一件事我不能完全解决

用户只需在表单中添加YouTube剪辑的链接,即可将YouTube视频添加到其个人资料中,例如:

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

现在,一旦用户单击submit,就必须嵌入视频。唯一的问题是我只需要这个部分
9YgjZ4oPrj4
来嵌入 (见下面的代码)

我怎样才能让它工作?
它实际上与Facebook使用的相同

您可以构建主机名和闭包的地图:

$tubes = array(
  'youtube.com' => function($parsed_url) {
    //$parsed_url contains data as returned by parse_url()
  },
  'youtu.be' => function($parsed_url) {
    //
  },
);
然后用正则表达式解析内容,获取URL,并通过调用映射中的appropiate元素传递它们

这种方法更通用,因为你不局限于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]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/', $replace, $text);

var_dump($matches);

以下是一些从字符串中提取YouTube ID的代码注意我只是想知道,但它应该做你想做的事

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 : '');
}
测试了以下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"

例如,使用正则表达式,但你没有尝试,所以我不会…@Sam我看到你不习惯接受答案,这是一个遗憾,这导致你有一个坏的因果报应,没有收到任何答案。请看下面给出的两个答案并接受其中一个。哦,我明白了,很抱歉我不知道@SamHendrickx不只是说“谢谢”,而是投票并接受答案。事情就是这样发展的。但我不能因为我的名声低于15岁
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"