Подтвердить что ты не робот

Найдите ссылку youtube в строке PHP и преобразуйте ее в код встраивания?

Найдите Youtube видео ссылку в Строка PHP и конвертировать в код встроенного кода strong >

Код для вставки:

<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
4b9b3361

Ответ 1

Попробуйте следующее:

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']);

Ответ 2

Небольшое усовершенствование решения Joran для обработки короткого URL-адреса 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
    );
}

Вы можете протестировать эту функцию онлайн здесь

Ответ 3

Существует два типа ссылок на 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!

Ответ 4

Быстрая функция для генерации ссылки на встроенный URL любого из видео 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;
}

Ответ 5

Я знаю, что это старый поток, но для тех, кто имеет эту проблему и ищет помощи, я нашел класс PHP на GitHub - Embera.

В основном библиотека, которая преобразует URL-адреса YouTube в любую строку в связанный с ней элемент iframe. Я использую его и буду продолжать использовать его везде!

Ответ 6

Я думаю, безопасный, супер простой способ получить идентификатор
что является своего рода пуленепробиваемым, это просто использовать структуру URL.

function getYoutubeEmbedUrl($url){

    $urlParts   = explode('/', $url);
    $vidid      = explode( '&', str_replace('watch?v=', '', end($urlParts) ) );

    return 'https://www.youtube.com/embed/' . $vidid[0] ;
}

Ответ 7

Ниже будут работать для всех типов URL-адресов YouTube.

preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);

$youtube_id = $match[1];

Ответ 8

Ну, сначала нужно отфильтровать ссылки на YouTube и поместить их в массив. Затем вам нужно узнать идентификатор видео URL, который очень прост. Используйте этот script:

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-адреса. Может быть, это помогло в любом случае;)

С идентификатором видео вы можете вставлять видео;)

Ответ 9

Если строка указана с пользовательского ввода или любая, непредсказуемая, забудьте использовать RegEx... серьезно. Это откроет банку червей для вас.

Вместо этого попробуйте изучить использование парсера HTML для извлечения URL-адреса на основе определенных правил и селекторов.

В основном я использую ColdFsuion/Java, и JSoup поражает такого рода вещами, с гораздо большей легкостью и безопасностью.

http://jsoup.org/

Кажется, в PHP вы можете использовать что-то вроде этого:

http://code.google.com/p/phpquery/

Я хотел бы дать образец кода, но я не знаю PHP достаточно хорошо. Но отпустите его.

Мики.

Ответ 10

<?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>