Я создаю чат, и у меня есть функция, которая берет URL-адрес vimeo и конвертирует его в встроенное видео, и это работает. Проблема в том, что, когда я добавляю любой другой текст в строку, он не работает, в то время как я хотел бы сохранить текст вокруг него и по-прежнему преобразовывать ссылку vimeo в видео и встраивать его.
Это мой код, который конвертирует любую ссылку vimeo в встроенное видео
<?php
function convertVimeo($url)
{
########################################################
//extract the ID
if(preg_match(
'/\/\/(www\.)?vimeo.com\/(\d+)($|\/)/',
$url,
$matches
))
{
//Si l'url de vimeo est trouve//the ID of the Vimeo URL: 71673549
$id = $matches[2];
//set a custom width and height
$width = '640';
$height = '360';
//echo the embed code and wrap it in a class
return '<div class="videowrapper well"><iframe src="http://player.vimeo.com/video/'.$id.'?title=0&byline=0&portrait=0&badge=0&color=ffffff" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div>';
}
//Fin de si l'url de vimeo est trouve
########################################################
}
//store the URL into a variable
$message = 'https://vimeo.com/33881199';
$message = convertVimeo($message);
echo $message;
?>
Код выше работает отлично, но когда я делаю
<?php
//store the URL into a variable
$message = 'Some text before https://vimeo.com/33881199 and text after ';
$message = convertVimeo($message);
echo $message;
?>
Больше не работает
Как сделать так, чтобы текст оставался вокруг видео, и при этом отображать видео?
Ваша функция в порядке, но проблема в том, как вы ее называете
замещать
$message = convertVimeo($message);
С
$message = preg_replace_callback('#https://vimeo.com/\d*#', function($message) { return convertVimeo($message[0]);
}, $message);
Ответ: использовать preg_replace_callback()
Попробуй это :
$doConvert = function($url) {
return convertVimeo($url[0]);
};
$message = preg_replace_callback('#https://vimeo.com/\d*#', $doConvert, $message);
echo $message;
Скрипт заменит и применяет вам функцию convertVimeo для каждого шаблона url vimeo.
Быстрая функция для генерации встроенного URL.
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;
}
Я написал здесь функцию комбинации ответов, чтобы сделать ее очень простой в использовании.
Работает только для простых ссылок vimeo, но если это плавает на вашей лодке:
public function linkURLs( $text )
{
$text = preg_replace('#https?://(www\.)?vimeo\.com/(\d+)#',
'<iframe class="videoFrame" src="//player.vimeo.com/video/$2" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
$text);
return $text;
}
мое решение для ссылки на YouTube и Vimeo ссылку, я чувствую себя хорошо
function convertLinkToEmbed($videoLink, $width, $height)
{
$embed = '';
if (preg_match('/https:\/\/(?:www.)?(youtube).com\/watch\\?v=(.*?)/', $videoLink))
$embed = preg_replace("/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", "<iframe width=\"" . $width . "\" height=\"" . $height . "\" src=\"//www.youtube.com/embed/$1\" frameborder=\"0\" allowfullscreen></iframe>", $videoLink);
if (preg_match('/https:\/\/vimeo.com\/(\\d+)/', $videoLink, $regs))
$embed = '<iframe src="http://player.vimeo.com/video/' . $regs[1] . '?title=0&byline=0&portrait=0&badge=0&color=ffffff" width="' . $width . '" height="' . $height . '" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
return $embed;
}