在 PHP字符串中找到 Youtube 视频链接,并将转换为嵌入代码强>
嵌入代码:
<iframe width="420" height="315" src="//www.youtube.com/embed/0GfCP5CWHO0" frameborder="0" allowfullscreen></iframe>
PHP代码/字符串:
<?php echo $post_details['description']; ?>
Youtube链接:
http://www.youtube.com/watch?v=0GfCP5CWHO0
答案 0 :(得分:30)
试试这个:
preg_replace("/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i","<iframe width=\"420\" height=\"315\" src=\"//www.youtube.com/embed/$1\" frameborder=\"0\" allowfullscreen></iframe>",$post_details['description']);
答案 1 :(得分:25)
Joran解决方案的一些改进,以处理youtube短网址格式:
function convertYoutube($string) {
return preg_replace(
"/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
"<iframe src=\"//www.youtube.com/embed/$2\" allowfullscreen></iframe>",
$string
);
}
您可以在线here
测试此功能答案 2 :(得分:15)
一个视频有两种类型的YouTube链接:
示例:
$link1 = 'https://www.youtube.com/watch?v=NVcpJZJ60Ao';
$link2 = 'https://www.youtu.be/NVcpJZJ60Ao';
此功能同时处理:
function getYoutubeEmbedUrl($url)
{
$shortUrlRegex = '/youtu.be\/([a-zA-Z0-9_-]+)\??/i';
$longUrlRegex = '/youtube.com\/((?:embed)|(?:watch))((?:\?v\=)|(?:\/))([a-zA-Z0-9_-]+)/i';
if (preg_match($longUrlRegex, $url, $matches)) {
$youtube_id = $matches[count($matches) - 1];
}
if (preg_match($shortUrlRegex, $url, $matches)) {
$youtube_id = $matches[count($matches) - 1];
}
return 'https://www.youtube.com/embed/' . $youtube_id ;
}
$ link1或$ link2的输出将是相同的:
$output1 = getYoutubeEmbedUrl($link1);
$output2 = getYoutubeEmbedUrl($link2);
// output for both: https://www.youtube.com/embed/NVcpJZJ60Ao
现在你可以在iframe中使用输出了!
答案 3 :(得分:8)
用于生成任何FB / vimeo / youtube视频的嵌入网址链接的快速功能。
public function generateVideoEmbedUrl($url){
//This is a general function for generating an embed link of an FB/Vimeo/Youtube Video.
$finalUrl = '';
if(strpos($url, 'facebook.com/') !== false) {
//it is FB video
$finalUrl.='https://www.facebook.com/plugins/video.php?href='.rawurlencode($url).'&show_text=1&width=200';
}else if(strpos($url, 'vimeo.com/') !== false) {
//it is Vimeo video
$videoId = explode("vimeo.com/",$url)[1];
if(strpos($videoId, '&') !== false){
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://player.vimeo.com/video/'.$videoId;
}else if(strpos($url, 'youtube.com/') !== false) {
//it is Youtube video
$videoId = explode("v=",$url)[1];
if(strpos($videoId, '&') !== false){
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://www.youtube.com/embed/'.$videoId;
}else if(strpos($url, 'youtu.be/') !== false){
//it is Youtube video
$videoId = explode("youtu.be/",$url)[1];
if(strpos($videoId, '&') !== false){
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://www.youtube.com/embed/'.$videoId;
}else{
//Enter valid video URL
}
return $finalUrl;
}
答案 4 :(得分:3)
我知道这是一个老线程,但对于有这个挑战并寻求帮助的人,我在GitHub上找到了一个PHP类 - Embera。
基本上是一个oembed库,可将任意字符串中的YouTube网址转换为关联的iframe元素。我正在使用它,并将继续在任何地方使用它!
答案 5 :(得分:3)
我认为获取ID的一种安全,简单的方法
防弹是简单地使用URL结构。
function getYoutubeEmbedUrl($url){
$urlParts = explode('/', $url);
$vidid = explode( '&', str_replace('watch?v=', '', end($urlParts) ) );
return 'https://www.youtube.com/embed/' . $vidid[0] ;
}
答案 6 :(得分:2)
示例:
$link1 = getEmbedUrl('https://www.youtube.com/watch?v=BIjqw7zuEVE');
$link2 = getEmbedUrl('https://vimeo.com/356810502');
$link3 = getEmbedUrl('https://example.com/link/12345');
功能:
function getEmbedUrl($url) {
// function for generating an embed link
$finalUrl = '';
if (strpos($url, 'facebook.com/') !== false) {
// Facebook Video
$finalUrl.='https://www.facebook.com/plugins/video.php?href='.rawurlencode($url).'&show_text=1&width=200';
} else if(strpos($url, 'vimeo.com/') !== false) {
// Vimeo video
$videoId = isset(explode("vimeo.com/",$url)[1]) ? explode("vimeo.com/",$url)[1] : null;
if (strpos($videoId, '&') !== false){
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://player.vimeo.com/video/'.$videoId;
} else if (strpos($url, 'youtube.com/') !== false) {
// Youtube video
$videoId = isset(explode("v=",$url)[1]) ? explode("v=",$url)[1] : null;
if (strpos($videoId, '&') !== false){
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://www.youtube.com/embed/'.$videoId;
} else if(strpos($url, 'youtu.be/') !== false) {
// Youtube video
$videoId = isset(explode("youtu.be/",$url)[1]) ? explode("youtu.be/",$url)[1] : null;
if (strpos($videoId, '&') !== false) {
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://www.youtube.com/embed/'.$videoId;
} else if (strpos($url, 'dailymotion.com/') !== false) {
// Dailymotion Video
$videoId = isset(explode("dailymotion.com/",$url)[1]) ? explode("dailymotion.com/",$url)[1] : null;
if (strpos($videoId, '&') !== false) {
$videoId = explode("&",$videoId)[0];
}
$finalUrl.='https://www.dailymotion.com/embed/'.$videoId;
} else{
$finalUrl.=$url;
}
return $finalUrl;
}
答案 7 :(得分:1)
以下内容适用于所有类型的YouTube网址。
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];
答案 8 :(得分:0)
嗯,您需要先过滤出youtube链接并将它们放入数组中。 接下来,您需要找到网址的视频ID,这非常容易。使用此脚本:
function getIDfromURL() {
var video_url = document.getElementById('url').value;
var video_id = video_url.split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if (ampersandPosition != -1) { video_id = video_id.substring(0, ampersandPosition); }
document.getElementById('url').value=video_id;
}
你当然可以使用PHP函数,但我在这里只使用JS从URL获取id。也许这有助于反正;)
使用视频ID,您可以嵌入视频;)
答案 9 :(得分:0)
如果字符串来自用户输入,或者任何方式不可预测,那么请忘记使用RegEx ...认真。它会为你打开一堆蠕虫。
相反,尝试使用HTML解析器根据某些规则和选择器提取URL。
我主要使用ColdFsuion / Java,JSoup对于这种事情来说非常棒,而且更加轻松和安全。
看来,在PHP中,你可以使用类似的东西:
http://code.google.com/p/phpquery/
我想提供代码示例,但我不太了解PHP。但试一试。
米奇。
答案 10 :(得分:0)
<?php
$url = 'https://www.youtube.com/watch?v=u9-kU7gfuFA';
preg_match('/[\\?\\&]v=([^\\?\\&]+)/', $url, $matches);
$id = $matches[1];
$width = '800px';
$height = '450px'; ?>
<iframe id="ytplayer" type="text/html" width="<?php echo $width ?>" height="<?php echo $height ?>"
src="https://www.youtube.com/embed/<?php echo $id ?>?rel=0&showinfo=0&color=white&iv_load_policy=3"
frameborder="0" allowfullscreen></iframe>
答案 11 :(得分:0)
另一种简单的替代方法是使用 parse_url
和 parse_str
函数。
function getYoutubeEmbedUrl ($url) {
$parsedUrl = parse_url($url);
# extract query string
parse_str(@$parsedUrl['query'], $queryString);
$youtubeId = @$queryString['v'] ?? substr(@$parsedUrl['path'], 1);
return "https://youtube.com/embed/{$youtubeId}";
}
假设我们有这两个链接:
$link1 = 'https://www.youtube.com/watch?v=NVcpJZJ60Ao';
$link2 = 'https://www.youtu.be/NVcpJZJ60Ao';
getYoutubeEmbedUrl($link1); // https://youtube.com/embed/NVcpJZJ60Ao
getYoutubeEmbedUrl($link2); // https://youtube.com/embed/NVcpJZJ60Ao
parse_url
函数会将链接提取为 4 个组件:scheme
、host
、path
和 query
(see docs)。
parse_url($link1);
// output
[
"scheme" => "https",
"host" => "www.youtube.com",
"path" => "/watch",
"query" => "v=NVcpJZJ60Ao",
]
$link2
的输出将是:
parse_url($link2);
// output
[
"scheme" => "https",
"host" => "www.youtu.be",
"path" => "/NVcpJZJ60Ao",
]
而 parse_str
会将查询字符串转换为数组 (see docs)。
parse_str('v=NVcpJZJ60Ao', $output);
// value of variable $output
[
"v" => "NVcpJZJ60Ao",
]