Avatar billede bavingo Nybegynder
10. december 2007 - 12:04 Der er 20 kommentarer og
1 løsning

Preg_replace et youtube link

Jeg er lige begyndt så småt at se på regex og det er jo ufattelig behageligt at arbejde med, men nu har jeg et problem, nemlig at jeg meget gerne vil have et youtube link til at blive til en video afspiller. Mit forsøg ser ud som følgende:

<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY";
echo'<hr />';
$str = preg_replace("/\d+/", "<b>\\0</b>", $str);
$replacement = '<object width="425" height="355"><param name="movie" value="\\0&rel=1"></param><param name="wmode" value="transparent"></param><embed src="\\0&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>';
$str = preg_replace("/http:\/\/youtube\.com\/watch\?v=\w+/", $replacement, $str);
echo $str;
?>

Hvad jeg ikke forstår er at det lader til at den ikke kan hente hele sætningen ind og dermed ikke lave et ordenligt link.
Avatar billede nielle Nybegynder
10. december 2007 - 12:41 #1
Måske sådan?

<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY";

$replacement =
"<object width='425' height='355'>
<param name='movie' value='\\0&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='$0&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed>
</object>";

$str = preg_replace("#http://youtube\.com/watch\?v=[a-z0-9]+#i", $replacement, $str);

echo $str;
?>
Avatar billede nielle Nybegynder
10. december 2007 - 12:42 #2
... hrm:

<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY";

$replacement =
"<object width='425' height='355'>
<param name='movie' value='$0&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='$0&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed>
</object>";

$str = preg_replace("#http://youtube\.com/watch\?v=[a-z0-9]+#i", $replacement, $str);

echo $str;
?>
Avatar billede bavingo Nybegynder
10. december 2007 - 12:44 #3
Hmm nej, den virker stadig ikke korrekt. Den outputter stadig et tomt hvid felt og med teksten jeg sendte nedenunder.

Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtYHer er et youtube link:
Avatar billede nielle Nybegynder
10. december 2007 - 12:51 #4
Pråv at lave en Vis Kode og lad os se hvordan den genererede kode ser ud.
Avatar billede bavingo Nybegynder
10. december 2007 - 13:37 #5
Følgende er koden:

Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtYHer er et youtube link: <object width='425' height='355'>
<param name='movie' value='http://youtube.com/watch?v=GEfx8I5PgtY&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='http://youtube.com/watch?v=GEfx8I5PgtY&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed>
</object>
Avatar billede nielle Nybegynder
10. december 2007 - 13:46 #6
Er det Eksperten som beslutter sig for at formatere specielt, eller er der vitterligt ingen

<a href='...' osv.

i første linje?
Avatar billede zurekk Nybegynder
10. december 2007 - 13:56 #7
At matche et youtube link er vel:

/^(http://)?(www.)?youtube.com/watch?v=[A-Za-z_-]{11}$/i
Avatar billede zurekk Nybegynder
10. december 2007 - 13:57 #8
Har ingen idé om hvad der lige skete der.
Det er kun fra /^ og til /i på første linje.
Resten er noget rod fra exp.
Avatar billede nielle Nybegynder
10. december 2007 - 13:59 #9
Jeg har ikek lige adgang til en PHP installation her og nu, men den er prøvet efter i C# og der virker den.

Men du kan jo prøve med denne variation:

<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY xxx";

$replacement =
"<object width='425' height='355'>
<param name='movie' value='$1&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='$1&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed>
</object>";

$str = preg_replace("#(http://youtube\.com/watch\?v=[a-z0-9]+)#i", $replacement, $str);

echo $str;
?>
Avatar billede bavingo Nybegynder
10. december 2007 - 14:17 #10
Hmm nej det virker ikke rigtigt :S
Avatar billede zurekk Nybegynder
10. december 2007 - 15:34 #11
nielle >
Alle videoID's er 11 karakterer lange, og de indeholder også "-" og "_", så i længden ville [a-z0-9] kunne give problemer :-)
Avatar billede nielle Nybegynder
10. december 2007 - 15:46 #12
Nu forholder jeg mig i første omgang til det stykke data som bavingo har postet sammen med sit spørgsmål. Koden burde i sin nuværende form virke med dette. Det er en gåde hvorfor den ikke gør det, og den del skal vi i hvert fald have løst.

... Men løsningen kan i øvrigt uden videre udvides til også at fungere med '_' og '-'. Til dette ville jeg nok så heller vælge del-mønsteret (\w-){11} og så muligvis droppe i-modifieren.

Jeg ved dog ikke hvor du har oplysningen fra om at de altid er præcis 11 karaktere lange. Er det ved observation, eller er det dokumenteret et eller andet sted?
Avatar billede bavingo Nybegynder
10. december 2007 - 15:49 #13
zurekk, hvis alle deres video har et video id på 11 karakterer, undrer det mig meget at denne specifikke video virker?
Avatar billede nielle Nybegynder
10. december 2007 - 16:09 #14
"GEfx8I5PgtY" er da 11 tegn langt?
Avatar billede zurekk Nybegynder
10. december 2007 - 17:55 #15
Ja den er 11 tegn lang, det var da også hvad jeg sagde :)?

"Alle videoID's er 11 karakterer lange"

og dit id er 11 karakterer langt :)
Avatar billede nielle Nybegynder
10. december 2007 - 19:56 #16
Og jeg spurgte om der var noget der kunne dokumenteres?
Avatar billede nielle Nybegynder
10. december 2007 - 20:12 #17
<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY <--- lige der!";

echo "<br><br>";

$replacement =
"<object width='425' height='355'>
<param name='movie' value='http://www.youtube.com/v/$1&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='http://www.youtube.com/v/$1&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed>
</object>";

$str = preg_replace("#http://youtube\.com/watch\?v=([a-z0-9]+)#i", $replacement, $str);

echo $str;
?>
Avatar billede bavingo Nybegynder
10. december 2007 - 22:26 #18
Mange tak nielle, det er perfekt. Læg et svar og du får point.
Avatar billede nielle Nybegynder
10. december 2007 - 23:06 #19
Hvis den med de 11 tegn lige skal med:

<?php
echo $str = "Her er et youtube link: http://youtube.com/watch?v=GEfx8I5PgtY <--- lige der!";

echo "<br><br>";

$replacement =
"<object width='425' height='355'>
<param name='movie' value='http://www.youtube.com/v/$1&rel=1'></param>
<param name='wmode' value='transparent'></param>
<embed src='http://www.youtube.com/v/$1&rel=1' type='application/x-shockwave-flash' wmode='transparent' width='425'

height='355'></embed>
</object>";

$str = preg_replace("#http://youtube\.com/watch\?v=([\w-]{11})#i", $replacement, $str);

echo $str;
?>
Avatar billede zurekk Nybegynder
11. december 2007 - 18:51 #20
Det er bare ren observation :)
Har selv skullet bruge sådan en funktion.

Men jeg fik set nok ID'er igennem til at jeg turde stole på en 11 karakters regel :)
Avatar billede nielle Nybegynder
12. december 2007 - 06:46 #21
Ok :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester