如何在PHP中嵌入YouTube视频?

61

有人能否给出一个想法,如果我们只有YouTube视频的URL或嵌入代码,如何展示或嵌入该视频?


那不是上传,而是嵌入。 - Pim Jager
6
不将其嵌入PHP... - nlucaroni
13个回答

92

您需要请求用户将来自YouTube视频的11个字符代码存储起来。

例如:http://www.youtube.com/watch?v=Ahg6qcgoay4

这个11位字符代码是:Ahg6qcgoay4

然后,您将把此代码放入数据库中。每当您想在页面中放置YouTube视频时,请从数据库加载这个代码并放置以下代码:

例如,对于Ahg6qcgoay4,它将是:

<object width="425" height="350" data="http://www.youtube.com/v/Ahg6qcgoay4" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/Ahg6qcgoay4" /></object>

20
要求用户从URL中提取代码是一个不好的想法,使用正则表达式很容易编写代码来提取它! -1 - hasen
谢谢,这是一个非常有用的解决方案。 - Teerasej
一些YouTube视频不包含?v=。 - Waqar Alamgir

53

不要将嵌入代码存储在您的数据库中--YouTube可能会不时更改嵌入代码和URL参数。例如,<object>嵌入代码已被弃用,而采用了<iframe>嵌入代码。您应该从URL /嵌入代码中解析出视频ID(使用正则表达式、URL解析函数或HTML解析器),并将其存储。然后,使用YouTube API当前提供的任何机制显示它。

一个提取视频ID的简单PHP示例如下:

<?php
    preg_match(
        '/[\\?\\&]v=([^\\?\\&]+)/',
        'http://www.youtube.com/watch?v=OzHvVoUGTOM&feature=channel',
        $matches
    );
    // $matches[1] should contain the youtube id
?>

建议您参考以下文章来了解如何处理这些id:

创建自己的YouTube视频播放器:


你能解释一下 [\\?\\&] 的作用吗?我觉得这一块很困惑。 - Casebash
好的,既然这是一个单引号字符串,\\?\? 是一样的(\ 只转义 \')。 - Casebash
1
“?”和“&”是查询字符串分隔符(例如www.youtube.com/watch?v=ABCDEFGH&feature=feedrec_grec_indexwww.youtube.com/watch?feature=feedrec_grec_index&v=ABCDEFGH)。转义“?”和“&”实际上是一种过度保护。使用“[?&]”和“[^?&]”就足够了。 - Salman A
一个完整的解决方案是使用MediaEmbed lib,它可以提取“主机slug”和“ID”,将其存储在数据库中,并在显示时完成输出HTML(作为iframe-首选-或作为对象回退)。 - mark

17

你可以从长或短的YouTube链接中获取嵌入代码,方法如下:

$ytarray=explode("/", $videolink);
$ytendstring=end($ytarray);
$ytendarray=explode("?v=", $ytendstring);
$ytendstring=end($ytendarray);
$ytendarray=explode("&", $ytendstring);
$ytcode=$ytendarray[0];
echo "<iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe>";

希望能对某人有所帮助


14

<object><embed>标签已经被弃用,参见HTML Youtube Videos, 使用<iframe>标签更为可取。

<iframe width="420" height="315"
src="http://www.youtube.com/embed/XGSy3_Czz8k?autoplay=1">
</iframe>

为了让用户不必花费一生的时间在链接中寻找视频ID并将其放入您的表单字段中,让他们发布他们在YouTube上发现的视频链接,您可以使用以下正则表达式来获取视频ID:

preg_match("/^(?:http(?:s)?:\/\/)?
    (?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|
    (?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches);
要获取视频ID,您可以提取$matches[1],这些匹配项如下: 本答案的一部分参考了@shawn在此问题中的回答。

新行/空格给我搞糊涂了。复制/粘贴时记得删除它们。 - Zeth

7

使用正则表达式提取watch?v=后面的“视频ID”。

将视频ID存储在变量中,我们称之为vid

从随机视频获取嵌入代码,从嵌入代码中删除视频ID,并用您获得的vid替换它。

我不知道如何在PHP中处理正则表达式,但这应该不难。

以下是Python示例代码:

>>> ytlink = 'http://www.youtube.com/watch?v=7-dXUEbBz70'
>>> import re
>>> vid = re.findall( r'v\=([\-\w]+)', ytlink )[0]
>>> vid
'7-dXUEbBz70'
>>> print '''<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/%s&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/%s&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>''' % (vid,vid)
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/7-dXUEbBz70&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7-dXUEbBz70&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
>>>

正则表达式v\=([\-\w]+)捕获了在v=之后的字符和破折号的子字符串。

5

我写了一些代码,可以自动将URL转换为链接,并自动嵌入来自YouTube的任何视频网址。我为正在开发的聊天室制作了它,并且它运行得非常好。我相信它也可以很好地用于其他用途,例如博客。

你只需要调用函数“autolink()”,并将要解析的字符串传递给它。

例如,包含下面的函数,然后输出此代码即可。

`
echo '<div id="chat_message">'.autolink($string).'</div>';

/****************Function to include****************/

<?php

function autolink($string){
    // force http: on www.
    $string = str_ireplace( "www.", "http://www.", $string );
    // eliminate duplicates after force
    $string = str_ireplace( "http://http://www.", "http://www.", $string );
    $string = str_ireplace( "https://http://www.", "https://www.", $string );

    // The Regular Expression filter
    $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
    // Check if there is a url in the text

$m = preg_match_all($reg_exUrl, $string, $match); 

if ($m) { 
$links=$match[0]; 
for ($j=0;$j<$m;$j++) { 

    if(substr($links[$j], 0, 18) == 'http://www.youtube'){

    $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string).'<br /><iframe title="YouTube video player" class="youtube-player" type="text/html" width="320" height="185" src="http://www.youtube.com/embed/'.substr($links[$j], -11).'" frameborder="0" allowFullScreen></iframe><br />';


    }else{

    $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string);

        } 

    } 
} 




               return ($string);
 }

?>

`


3

2

你可以使用Joomla轻松完成此操作。让我们假设一个样本YouTube URL - https://www.youtube.com/watch?v=ndmXkyohT1M

<?php 
$youtubeUrl =  JUri::getInstance('https://www.youtube.com/watch?v=ndmXkyohT1M');
$videoId = $youtubeUrl->getVar('v'); ?>

<iframe id="ytplayer" type="text/html" width="640" height="390"  src="http://www.youtube.com/embed/<?php echo $videoId; ?>"  frameborder="0"/>

2

我找到了另一种使用JavaScript和Youtube API的方法来搜索相同的主题。

直接从:http://code.google.com/apis/ajax/playground/#simple_embed

加载API

<script src="http://www.google.com/jsapi" type="text/javascript"></script>

执行以下 JavaScript 代码:
  google.load("swfobject", "2.1");
  function _run() {

    var videoID = "ylLzyHk54Z0"
    var params = { allowScriptAccess: "always" };
    var atts = { id: "ytPlayer" };
    // All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)
    swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "&enablejsapi=1&playerapiid=player1",
                       "videoDiv", "480", "295", "8", null, null, params, atts);


  }
  google.setOnLoadCallback(_run);

完整的示例在之前提到的页面中 http://code.google.com/apis/ajax/playground

1
您可以简单地创建一个 PHP 输入表单,用于 Varchar date,将其长度设置为 varchar,比如 300。然后要求用户复制并粘贴嵌入代码。当您查看记录时,您将能够查看流式视频。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接