webForumDet fria alternativet

Lägga till parameter i preg_replace-funktion?

7 svar · 903 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

Hallå!

Jag kör en funktion som ersätter alla youtubelänkar till inbäddade videor. Det funkar, men jag skulle även vilja ha med ev youtube-querystrings.

Detta (notera att det inte alltid finns en &t= med!):
http://www.youtube.com/watch?v=8N_tupPBtWQ&t=1m15s

Vill jag ska resultera i:
<iframe width="560" height="315" src="http://www.youtube.com/embed/8N_tupPBtWQ#t=1m15s" frameborder="0" allowfullscreen></iframe>

Hur gör jag detta? Antingen med ny kod eller modifiera den jag redan har nedan.

Tack!!

function video($str)
{
    $text = preg_replace('~
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube\.com    # or youtube.com followed by
          \S*             # Allow anything up to VIDEO_ID,
          [^\w\-\s]       # but char before ID is non-ID char.
        )                 # End host alternatives.
        ([\w\-]{10,12})      # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w\-]|$)     # Assert next char is non-ID or EOS.
        (?!               # Assert URL is not pre-linked.
          [?=&+%\w]*      # Allow URL (query) remainder.
          (?:             # Group pre-linked alternatives.
            [\'"][^<>]*>  # Either inside a start tag,
          | </a>          # or inside <a> element text contents.
          )               # End recognized pre-linked alts.
        )                 # End negative lookahead assertion.
        [?=&+%\w]*        # Consume any URL (query) remainder.
        ~ix', 
        '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>',
        $str);
    return $text;
}
bassebhuMedlem sedan nov. 20016 480 inlägg
#2

Nån som har nån häftig idé? :)

bassebhuMedlem sedan nov. 20016 480 inlägg
#3

Tipselitips? :)

metalboyMedlem sedan jan. 2005953 inlägg
#4
function video($str)
{
    $text = preg_replace('~
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube\.com    # or youtube.com followed by
          \S*             # Allow anything up to VIDEO_ID,
          [^\w\-\s]       # but char before ID is non-ID char.
        )                 # End host alternatives.
        ([\w\-]{10,12})      # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w\-]|$)     # Assert next char is non-ID or EOS.
        (?!               # Assert URL is not pre-linked.
          [?=&+%\w]*      # Allow URL (query) remainder.
          (?:             # Group pre-linked alternatives.
            [\'"][^<>]*>  # Either inside a start tag,
          | </a>          # or inside <a> element text contents.
          )               # End recognized pre-linked alts.
        )                 # End negative lookahead assertion.
        ([?=&+%\w]*)      # Extra parameters.
        ~ix', 
        '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1#$2" frameborder="0" allowfullscreen></iframe>',
        $str);
    return $text;
}
bassebhuMedlem sedan nov. 20016 480 inlägg
#5

Tack, nu funkar det för youtubes korta länkar (youtu.be), men inte för de långa (som jag använde ovan). Där dyker videon upp och sen kommer detta i ren text efter: ";t=1m15s"

Hur löser man det? :) Tack!

metalboyMedlem sedan jan. 2005953 inlägg
#6

Jaså? Jag testade med den adress du skrev i första inlägget och det funkade. Nåja, jag kollar vidare på detta när jag kommer hem från jobbet om ingen annan har svarat innan dess :)

Dies_IraeMedlem sedan aug. 2001145 inlägg
#7

Kolla upp parse_url och parse_str http://php.net/manual/en/function.parse-url.php

Gör livet betydligt mycket enklare i youtubes och många andra fall än att använda regexp

bassebhuMedlem sedan nov. 20016 480 inlägg
#8

metalboy skrev:

Jaså? Jag testade med den adress du skrev i första inlägget och det funkade. Nåja, jag kollar vidare på detta när jag kommer hem från jobbet om ingen annan har svarat innan dess :)

Mja, för mig skrivs det ut såhär:

<iframe width="560" height="315" src="http://www.youtube.com/embed/8N_tupPBtWQ#&amp" frameborder="0" allowfullscreen></iframe>;t=1m15s

Edit/ Lyckades lösa det genom att lägga till ett ; här: ([?=&+;%\w]*)
Vet inte vad det gjorde men det funkar. Rätt?

Edit2/ Och med ett minus-tecken däri så har den hittills svalt alla sorters youtubelänkar som jag testat! ([?=&+-;%\w]*)

Hurra! Tack!

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)