M M@rtin Medlem sedan dec. 1999 2 085 inlägg Frågan 10 juli 2006 14:44 #1 Jag skrev en funktion som man kunde skicka in en url till en youtube video i och få ut embed-koden för videon. Det fungerar bra men det blev en hel del kod och jag tänkte att det måste gå att göra på typ en rad med reguljära uttryck. Tyvärr är jag väldigt dålig på regexp och jag får det inte riktigt att fungera.
En url ser ut så här:
http://www.youtube.com/watch?v=4EszplXQzeA
men kan även ha fler querystring:
http://www.youtube.com/watch?v=4EszplXQzeA&search=citro
Embed koden ser ut så här:
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/4EszplXQzeA"></param><embed src="http://www.youtube.com/v/4EszplXQzeA" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
Mitt försök till funktion ser ut så här:
function get_embedded_content($url){
$embed = preg_replace('#[url]http://(www\.)?youtube.com/watch\?v=([/url][A-Za-z0-9]+)(.+?)#i','<object width="425" height="350"><param name="movie" value="$2"></param><embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="425" height="350"></embed></object>',$url);
return $embed;
}
Det fungerar ganska bra men om man har fler querystrings så får man dem kvar på slutet, jag vill att de ska försvinna, det är därför jag försökt med (.+?) i slutet men det gör ingen verkan.
Jag skulle även vilja att om man skickar in en helt annan url så får man bara en tom sträng tillbaka.
Någon som vet hur jag kan lösa detta?
Gör så här:
<?PHP
function get_embedded_content($url){
$test = preg_match('#http://(www\.)?youtube.com/watch\?v=([A-Za-z0-9]+)#i',$url,$matches);
if (!$test)
return "<i>Detta är inte en videokod... ):</i>";
echo '<object width="425" height="350"><param name="movie" value="' . $matches[2] . '"></param><embed src="http://www.youtube.com/v/' . $matches[2] . '" type="application/x-shockwave-flash" width="425" height="350"></embed></object>';
}
// Testa
echo get_embedded_content('http://www.google.se');
echo "<br />";
echo get_embedded_content('http://www.youtube.com/watch?v=4EszplXQzeA&search=citro');
echo "<br />";
echo get_embedded_content('http://www.youtube.com/watch?v=4EszplXQzeA');
echo "<br />";
?>
/Edit: Pyttepluttfel korrigerat!
M M@rtin Medlem sedan dec. 1999 2 085 inlägg Ah det fungerade ju jättebra, tackar!
Fast om man har en annan querystring före v så funkar det inte, jag tänkte inte på den möjligheten innan. Finns det något enkelt sätt att lösa det?
P pettsson Medlem sedan jan. 2002 1 122 inlägg Du skulle ju kunna lägga till .* före v, eftersom det kommer matcha alla eventuella tecken innan.
M M@rtin Medlem sedan dec. 1999 2 085 inlägg Det kan man göra ja! Tack!