如何在 PHP 中嵌入 YouTube 视频?
-
03-07-2019 - |
题
谁能给我一个主意,我们怎样才能 展示 或者如果我们只有 URL 或嵌入代码就嵌入 YouTube 视频?
解决方案
您必须要求用户存储YouTube视频中的11个字符代码。
例如 http://www.youtube.com/watch?v=Ahg6qcgoay4
十一个字符代码是:Ahg6qcgoay4
然后,您将此代码放入数据库中。然后,无论您想将youtube视频放在页面中的哪个位置,都要从数据库中加载角色并输入以下代码: -
e.g。对于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>
其他提示
请勿将嵌入代码存储在数据库中 - YouTube 可能会不时更改嵌入代码和网址参数。例如 <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 视频播放器:
从长短的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>";
希望它有助于某人
这 <object>
和 <embed>
标签已被弃用 HTML YouTube 视频, ,最好使用 <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]
, ,这些将匹配:
- youtube.com/v/vidid
- youtube.com/vi/vidid
- youtube.com/?v=vidid
- youtube.com/?vi=vidid
- youtube.com/watch?v=vidid
- youtube.com/watch?vi=vidid
- youtu.be/vidid
- youtube.com/embed/vidid
- http://youtube.com/v/vidid
- http://www.youtube.com/v/vidid
- https://www.youtube.com/v/vidid
- youtube.com/watch?v=vidid&wtv=wtv
- http://www.youtube.com/watch?dev=inprogress&v=vidid&feature=lated
- https://m.youtube.com/watch?v=vidid
这个答案的一部分是由@shawn的答案引用的 这个问题.
使用正则表达式提取<!>“;视频ID <!>”;在watch?v=
将视频ID存储在变量中,让我们调用此变量vid
从随机视频中获取嵌入代码,从嵌入代码中删除视频ID,并将其替换为v\=([\-\w]+)
你得到的。
我不知道如何在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=
捕获<=>
以下是我编写的一些代码,用于自动将网址转换为链接并自动嵌入来自youtube的任何视频网址。我是为一个我正在研究的聊天室做的,它运作得很好。我相信它可以用于任何其他用途,例如博客。
您所要做的就是调用函数<!> quot; autolink()<!> quot;并传递要解析的字符串。
例如,包括下面的函数,然后回显此代码。
`
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);
}
?>
`
如果您想以编程方式上传视频,请查看 YouTube数据API 适用于 PHP
在搜索同一主题时,我发现了另一种使用Javascript和Youtube API的方法
直接来自: http://code.google.com/apis/ajax /操场/#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
你可以用Joomla做到这一点。让我假设一个YouTube网址示例 - 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"/>
你可以简单地为Varchar date
创建一个php输入表单,给它一个varchar
的长度让我们说300.然后让用户复制并粘贴嵌入代码。当你查看记录时,你会看到流式视频。
luvboy,
如果我清楚了解,用户会提供Youtube视频的网址/代码,然后该视频就会显示在页面上。
为此,只需编写一个简单的页面,使用布局等。从youtube复制视频嵌入代码并将其粘贴到您的页面中。用一些字段替换嵌入代码,比如说VideoID。将此VideoId设置为您的用户提供的代码。
编辑:见Alec Smart的回答。
对Alec Smart的回答只是一个小小的更新:由于现在不推荐使用AS2,因此需要'?version = 3'才能让他的示例正常工作。请参阅 YouTube嵌入式播放器和播放器参数在<!>下;选择要播放的内容<!>详情。
换句话说:
<object width="425" height="350" data="http://www.youtube.com/v/Ahg6qcgoay4?version=3" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/Ahg6qcgoay4?version=3" /></object>
显然,上面的Youtube引用如下所示(内部嵌入可能用作尚不支持object标记的浏览器的后备):
<object width="640" height="390">
<param name="movie"
value="https://www.youtube.com/v/u1zgFlCw8Aw?version=3&autoplay=1"></param>
<param name="allowScriptAccess" value="always"></param>
<embed src="https://www.youtube.com/v/u1zgFlCw8Aw?version=3&autoplay=1"
type="application/x-shockwave-flash"
allowscriptaccess="always"
width="640" height="390"></embed>
</object>
或使用iframe(将 http://example.com 替换为您网站的域名):
<iframe id="ytplayer" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/u1zgFlCw8Aw?autoplay=1&origin=http://example.com" frameborder="0"/>
此 YouTube嵌入式生成器解决了我的所有问题视频嵌入。