I am currently trying to retrieve YouTube video IDs through url. I created a function getYoutubeVideoID
that strips $url
and finds the $sVideoID
. The Problem is that when i echo the variable i get an empty value of $sVideoID. How come i am getting no value result for $sVideoID
if i am assigning it the video ID?
<?php
if($_POST)
{
$url = $_POST['yurl'];
function getYoutubeVideoID($url) {
$sVideoID = preg_replace('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})
(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w-]*~ix','<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>',$url);
return $sVideoID;
}
$hth = 300; //$_POST['yheight'];
$wdth = 500; //$_POST['ywidth'];
?>
<?
//Iframe code
echo htmlentities ('<iframe src="http://www.youtube.com/embed/'.$sVideoID.'" frameborder="0" width="'.$wdth.'" height="'.$hth.'"></iframe>');
?>
<?
//Old way to embed code
echo htmlentities ('<embed src="http://www.youtube.com/v/'.$sVideoID.'" width="'.$wdth.'" height="'.$hth.'" type="application/x-shockwave-flash" wmode="transparent" embed="" /></embed>');
}
?>
Perhaps I am wrong, or maybe you haven't included all relevant data, but I do not see anywhere in your code where you execute the function you have created.
Instead of what you are currently doing, try this:
echo htmlentities ('<iframe src="http://www.youtube.com/embed/'.getYoutubeVideoID($url).'" frameborder="0" width="'.$wdth.'" height="'.$hth.'"></iframe>');
You can't simply define a function and it will execute and assign variables.. what you have has the function, when it is executed, return a variable in it's place. As an example, you could assign $var the return value
of your function:
$var = getYoutubeVideoID($url);
Instead of the very above, you could even try this:
$sVideoID = getYoutubeVideoID($url);
Lastly, instead of using regex as others have noted, you could use parse_url()
in combination with parse_str()
to get the data from your url:
$arr = parse_url($url);
parse_str($arr['query'], $output);
echo $output['v'];
How come i am getting no value result for $sVideoID
You never assign it (at least not in the code you provided). The code for $sVideoID
is inside a user defined function - getYoutubeVideoID()
. Which you are never calling. Daedalus provided a sample resolution in his answer.
As an aside… Don't parse the URL with a Regular Expression. There are other, easier ways
For example:
parse_url()
explode()
or parse_str()
on query