bassebhuMedlem sedan nov. 20016 480 inlägg 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 Nån som har nån häftig idé? :)
metalboyMedlem sedan jan. 2005953 inlägg 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 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 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 :)
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
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#&" 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!