web-dev-qa-db-fra.com

Trouver un lien youtube dans PHP string et le convertir en code d'intégration?

Trouver un Youtube video link in PHP Chaîne et convertir dans Code d'intégration ?

Code intégré:

<iframe width="420" height="315" src="//www.youtube.com/embed/0GfCP5CWHO0" frameborder="0" allowfullscreen></iframe>

PHP Code/String:

<?php echo $post_details['description']; ?>

Lien Youtube:

http://www.youtube.com/watch?v=0GfCP5CWHO0
14
Hassan Sardar

Essaye ça:

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']);
27
Joran Den Houting

Une petite amélioration de la solution de Joran pour traiter également le format d'URL courte 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
    );
}

Vous pouvez tester cette fonction en ligne ici

25
Syone

Il existe deux types de lien youtube:

Par exemple : 

$type1 = 'https://www.youtube.com/watch?v=NVcpJZJ60Ao';
$type2 = 'https://www.youtu.be/NVcpJZJ60Ao';

Ces liens font référence à la même vidéo . J'ai trouvé une fonction de ici qui gère les deux liens! :

function getYoutubeEmbedUrl($url)
{
    $shortUrlRegex = '/youtu.be\/([a-zA-Z0-9_]+)\??/i';
    $longUrlRegex = '/youtube.com\/((?:embed)|(?:watch))((?:\?v\=)|(?:\/))(\w+)/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 ;
}

La sortie de $ type1 ou $ type2 serait la même: 

 $output1 = getYoutubeEmbedUrl($type1);
 $output2 = getYoutubeEmbedUrl($type2);

$ output1 et $ output2: 

'https://www.youtube.com/embed/NVcpJZJ60Ao'

Maintenant, vous pouvez l'utiliser dans iframe!

14
Ahmad Mobaraki

Une fonction rapide permettant de générer le lien url incorporé de l’une des vidéos 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;
}
8
niravpatel9898

Je pense un moyen simple et sûr d'obtenir l'identifiant
Ce qui est un peu blindé est d’utiliser simplement la structure de l’URL. 

function getYoutubeEmbedUrl($url){

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

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

Je sais que c'est un vieux fil de discussion, mais pour tous ceux qui ont ce défi et qui cherchent de l'aide, j'ai trouvé un cours PHP sur GitHub - Embera .

Fondamentalement, une bibliothèque oembed qui convertit les URL YouTube de n’importe quelle chaîne en élément iframe associé. Je l'utilise et continuerai de l'utiliser partout!

3
Luke Stevenson

Vous trouverez ci-dessous une solution pour tous les types d’URL YouTube.

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

$youtube_id = $match[1];
1
Mahesh Yadav

Si la chaîne provient d'une entrée utilisateur, ou d'une manière quelconque imprévisible, oubliez alors d'utiliser RegEx ... sérieusement. Cela ouvrira une boîte de Pandore pour vous.

Au lieu de cela, essayez d’utiliser un analyseur HTML pour extraire l’URL en fonction de certaines règles et de certains sélecteurs.

J'utilise principalement ColdFsuion/Java et JSoup est incroyable pour ce genre de choses, avec beaucoup plus de facilité et de sécurité.

http://jsoup.org/

Il semble qu'en PHP, vous pourriez utiliser quelque chose comme ceci:

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

J'adorerais donner un exemple de code, mais je ne connais pas assez bienPHP. Mais essayez-le.

Mikey.

0

Eh bien, vous devez d'abord filtrer les liens youtube et les placer dans un tableau ..__ Ensuite, vous devez connaître l'identifiant vidéo de l'URL, ce qui est très facile. Utilisez ce 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;
}

Vous pouvez bien sûr utiliser une fonction PHP également, mais je viens d'utiliser JS ici pour obtenir l'identifiant à partir de l'URL. Peut-être que ça a quand même aidé;)

Avec l'identifiant vidéo, vous pouvez intégrer la vidéo;)

0
Tim Nikischin
<?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> 
0
Shakil Hossain