replace youtube links into embed code

there is already a question on this which is not solved.
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_26262923.html

$inputText = ' lorem ipsum test test http://www.youtube.com/watch?v=ckRsIy4Zqgo then another youtube link http://www.youtube.com/watch?v=sqiQBGkhE9w&feature=related sometext further';

 I want to replace only youtube links with youtube embed player.

 Output would be smth like this:
lorem ipsum test test EMBED CODE then another youtube link EMBED CODE sometext further

sample EMBED CODE is

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/BF1QogPioYI&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BF1QogPioYI&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object
 
LVL 1
iusephpAsked:
Who is Participating?
 
ropennerConnect With a Mentor Commented:
image of the output of the above code
output.jpg
0
 
KalpanCommented:
Here is the example for the appropriate one...

http://embedyoutubevideo.com/php-control-embedded-link-youtube.html

you can select as many as links and than customize with your code...

0
 
KalpanCommented:
you can use the loop if you are getting the links from database

foreach($links as $link){

$youtublink = $link['url'];

echo "lorem ipsum test test<br>";

echo '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/'.$youtubelink.'"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BF1QogPioYI&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object';

// if you are storing the whole link to your data base than replace as value="'.$youtubelink.'" above
}
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
iusephpAuthor Commented:
I am afraid above replies wont really help.

I am allowing users to enter message in a textarea. User can add youtube links (not embed code).
The youtube links in the message needs to be convereted to youtube embed codes in serverside php/

Its all about a string which is having some text and youtube links mixed.
Youtube links needs to be replaced to EMBED CODE. So when the message is rendered back it will be message + youtube videos
0
 
ropennerCommented:
This snippet works as it stands.  I'm sure there is a more efficient way to do it using php built-in functions but this is readable and easy to understand.

good luck.
<?PHP

# #1 Your cut and paste EMBED code with the "YOU_TUBE_IDENTIFIER" as just some text we will replace later
$EMBED_CODE =<<< endofembedcode
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/YOU_TUBE_IDENTIFIER&hl=en_US&fs=1&"></param>
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/YOU_TUBE_IDENTIFIER&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344">
</embed>
</object>

endofembedcode;

# #2 the text input by the user
$inputText = ' lorem ipsum test test http://www.youtube.com/watch?v=ckRsIy4Zqgo then another youtube link http://www.youtube.com/watch?v=sqiQBGkhE9w&feature=related sometext further';


# Now to combine #1 and #2 to match your example of
# lorem ipsum test test EMBED CODE then another youtube link EMBED CODE sometext further

$output = "";
# split your input into words and look for "http://www.youtube.com/watch?v="  which looks to be the common portion of the youtube URL
foreach (explode(" ",$inputText) as $word) {
	# see if youtube.com is in there
	if (strlen($word) == 0) continue;#	print "[$word]<BR>";
	if (preg_match("'http://www.youtube.com/watch'",$word)) { # if we find this url at the beginning of the word in position 0
		list($you_tube_url, $parameters) = explode('?',$word); # split the url by the equal sign to get the video reference identifier
		# put the parameters into name=>value pairs
		$mypairs = nameValue($parameters);

		# use the 'v' parameter
		$temp = preg_replace("/YOU_TUBE_IDENTIFIER/","{$mypairs{'v'}}",$EMBED_CODE); # insert the video identifier into the embed code above
		$output .= "$temp ";
	} else {
		$output .= "$word ";
	}
}

print "$output";

function nameValue($parameters="") {
	foreach (explode('&',$parameters) as $pairs) {
		list($name,$value) = explode('=',$pairs);
		$newpairings{$name} = $value;
	}
	return $newpairings;
}
?>

Open in new window

0
 
ropennerCommented:
comments in the code didn't match the code so I'm reposting the code so it is more understandable.
<?PHP

# #1 Your cut and paste EMBED code with the "YOU_TUBE_IDENTIFIER" as just some text we will replace later
$EMBED_CODE =<<< endofembedcode
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/YOU_TUBE_IDENTIFIER&hl=en_US&fs=1&"></param>
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/YOU_TUBE_IDENTIFIER&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344">
</embed>
</object>

endofembedcode;

# #2 the text input by the user
$inputText = ' lorem ipsum test test http://www.youtube.com/watch?v=ckRsIy4Zqgo then another youtube link http://www.youtube.com/watch?v=sqiQBGkhE9w&feature=related sometext further';


# Now to combine #1 and #2 to match your example of
# lorem ipsum test test EMBED CODE then another youtube link EMBED CODE sometext further

$output = "";
# split your input into words and look for "http://www.youtube.com/watch?v="  which looks to be the common portion of the youtube URL
foreach (explode(" ",$inputText) as $word) {
	# see if youtube.com is in there
	if (strlen($word) == 0) continue;#	print "[$word]<BR>";
	if (preg_match("'http://www.youtube.com/watch'",$word)) { # if we find this url in the $word
		list($you_tube_url, $parameters) = explode('?',$word); # split the url by the question mark '?' to get the url parameters
		# put the parameters into name=>value pairs
		$mypairs = nameValue($parameters);

		# use the 'v' parameter
		$temp = preg_replace("/YOU_TUBE_IDENTIFIER/","{$mypairs{'v'}}",$EMBED_CODE); # insert the video identifier into the embed code where ever YOU_TUBE_IDENTIFIER is found
		$output .= "$temp ";
	} else {
		$output .= "$word ";
	}
}

print "$output";


# splits up URL parameters into name value pairs
function nameValue($parameters="") {
	foreach (explode('&',$parameters) as $pairs) {
		list($name,$value) = explode('=',$pairs);
		$newpairings{$name} = $value;
	}
	return $newpairings;
}
?>

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.