Avatar billede jarner Nybegynder
09. maj 2008 - 12:46 Der er 5 kommentarer og
1 løsning

preg_replace og splitte en url

Hej Eksperter

Jeg skal lave en funktion på et forum, så man kan indsætte en youtube film ved at skrive

[youtube]youtube-url[/youtube]

jeg kan få det til at virke på formen

[youtube]youtube-filmkode[/youtube]

med følgende:

$message = preg_replace("/\[youtube\](.*?)\[\/youtube\]/si", "<object width=\"425\" height=\"355\"><param name=\"movie\" value=\"http://www.youtube.com/v/"."\\1"."></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/\\1\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"425\" height=\"355\"></embed></object>", $message);


Men jeg vil gerne have det sådan så man indsætter url'en i stedet. Det er nemmere for brugeren. Så praktisk talt skal url'en strippes for alt før "=".
Tænkte på en funktion a la

function do_split_url($link) {
$link2 = explode("=",$link);
$link = $link2[1];
return $link;
}

men jeg kan ikke kalde den inde i preg_replace..?

Nogen der har et bud på hvordan jeg nemmest får kædet det sammen?

PFT
Avatar billede jakobdo Ekspert
09. maj 2008 - 13:18 #1
Prøv at tag et kig på:

preg_replace_callback()
Avatar billede websitebasen Nybegynder
09. maj 2008 - 14:25 #2
Du kan måske bruge str_replace her kan du læse om det:
http://dk.php.net/manual/en/function.str-replace.php
Avatar billede jarner Nybegynder
09. maj 2008 - 20:25 #3
Tak for jeres svar. Tror godt man kunne have fået noget brugbart med begge løsninger. Dog fandt jeg selv en:

    $message = preg_replace("/\[youtube\]http\:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/si","    "<object width=\"425\" height=\"355\"><param name=\"movie\" value=\"http://www.youtube.com/v/"."\\1"."></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/"."\\1"."\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"425\" height=\"355\"></embed></object>, $message);

Da det gerne skulle være præcis den samme start på hver url fra youtube.

Igen tak for input.
Avatar billede jarner Nybegynder
09. maj 2008 - 20:25 #4
Altså det nye er

http\:\/\/www.youtube.com\/watch\?v\=(.*?)

i stedet for blot

(.*?)
Avatar billede nielle Nybegynder
09. maj 2008 - 20:36 #5
Et lille trick:

Hvis du nu ikke bruger:

preg_replace("/.../si", ...)

men i stedet bruger et andet tegn end '/', f.eks. '#':

preg_replace("#...#si", ...)

så behøver du ikke at escape alle de '/'-tegn der er inde i mønsteret:

$message = preg_replace("#\[youtube\]http://www.youtube.com/watch\?v=(.*?)\[/youtube\]#si", "<object width='425' height='355'><param name='movie' value='http://www.youtube.com/v/$1'></param><param name='wmode' value='transparent'></param><embed src='http://www.youtube.com/v/$1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed></object>, $message);

Noget nemmere at læse. :^)
Avatar billede jarner Nybegynder
10. maj 2008 - 00:06 #6
tak for tricket nielle, det er i sandhed lidt nemmere!
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