admin管理员组文章数量:1426810
I run a forum and want to automatically replace any link to a YouTube video with a youtube video player. I can't really find anything like this on the ineternet, but I have seen it in Wordpress.
I'm running PHP.
This is what i'm talking about:
/
I run a forum and want to automatically replace any link to a YouTube video with a youtube video player. I can't really find anything like this on the ineternet, but I have seen it in Wordpress.
I'm running PHP.
This is what i'm talking about:
http://en.support.wordpress./videos/youtube/
Share Improve this question edited Jul 8, 2011 at 10:33 David asked Jul 8, 2011 at 8:21 DavidDavid 16.8k35 gold badges110 silver badges169 bronze badges 4- Have you thought of using BBCode? – vascowhite Commented Jul 8, 2011 at 8:32
- I don't want to use anything extra that the uesr has to do. Just past in the URL and my code will replace the URL with a video player. wordpress does it.. – David Commented Jul 8, 2011 at 9:32
- I'm not 100% on how to do this, but I assume it's an easy task to create a regular expression that will find a youtube link and extract the video ID. You can then insert that ID into a template of the embed codes and replace the link with it. – Hubro Commented Jul 8, 2011 at 10:39
- Yea, thats how I see it as well. I have found a number of regex mands but none of them seem to allow me to find a youtube address in a block of text, extract the video id and replace the entire link with a video player. If i can't find a way to do this, im going to have to go down a bbcode method – David Commented Jul 8, 2011 at 12:35
5 Answers
Reset to default 2There are many, many questions on SO about regexping Youtube video IDs - just do a Google or site search. I took the liberty to modify this answer by ridgerunner to do what you want, ie. replace a Youtube URL with the embed code. Have a look and edit the pattern or embed code if needed. For example, you might want to wrap the embedded video in a div
.
<?php
// Replace Youtube URLs with embed code
function embedYoutube($text)
{
$search = '~
# Match non-linked youtube URL in the wild. (Rev:20130823)
(?:https?://)? # Optional scheme.
(?:[0-9A-Z-]+\.)? # Optional subdomain.
(?: # Group host alternatives.
youtu\.be/ # Either youtu.be,
| youtube # or youtube. or
(?:-nocookie)? # youtube-nocookie.
\. # followed by
\S* # Allow anything up to VIDEO_ID,
[^\w\s-] # but char before ID is non-ID char.
) # End host alternatives.
([\w-]{11}) # $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';
$replace = '<object width="425" height="344">
<param name="movie" value="http://www.youtube./v/$1?fs=1"</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowScriptAccess" value="always"></param>
<embed src="http://www.youtube./v/$1?fs=1"
type="application/x-shockwave-flash" allowscriptaccess="always" width="425" height="344">
</embed>
</object>';
return preg_replace($search, $replace, $text);
}
$string = 'This is the forum post content with some Youtube links:'."\n".
'http://www.youtube./watch?v=NLqAF9hrVbY'."\n".
'http://www.youtube./v/u1zgFlCw8Aw?fs=1&hl=en_US';
echo embedYoutube($string);
?>
You don't need to generate embedable HTML by hands, Youtube supports oEmbed protocol: http://oembed./#section5
You can try a tiny class for generating player's code - http://github./chernikovalexey/Livar. I've found it interesting ;)
Here's my version of Viktor's modification
/**
* Finds youtube videos links and makes them an embed.
* search: http://www.youtube./watch?v=xg7aeOx2VKw
* search: http://www.youtube./embed/vx2u5uUu3DE
* search: http://youtu.be/xg7aeOx2VKw
* replace: <iframe width="560" height="315" src="http://www.youtube./embed/xg7aeOx2VKw" frameborder="0" allowfullscreen></iframe>
*
* @param string
* @return string
* @see http://stackoverflow./questions/6621809/replace-youtube-link-with-video-player
* @see http://stackoverflow./questions/5830387/how-to-find-all-youtube-video-ids-in-a-string-using-a-regex
*/
function generateVideoEmbeds($text) {
// No youtube? Not worth processing the text.
if ((stripos($text, 'youtube.') === false) && (stripos($text, 'youtu.be') === false)) {
return $text;
}
$search = '@ # Match any youtube URL in the wild.
[^"\'](?:https?://)? # Optional scheme. Either http or https; We want the http thing NOT to be prefixed by a quote -> not embeded yet.
(?:www\.)? # Optional www subdomain
(?: # Group host alternatives
youtu\.be/ # Either youtu.be,
| youtube\. # or youtube.
(?: # Group path alternatives
/embed/ # Either /embed/
| /v/ # or /v/
| /watch\?v= # or /watch\?v=
) # End path alternatives.
) # End host alternatives.
([\w\-]{8,25}) # $1 Allow 8-25 for YouTube id (just in case).
(?: # Group unwanted &feature extension
[&\w-=%]* # Either &feature=related or any other key/value pairs
)
\b # Anchor end to word boundary.
@xsi';
$replace = '<iframe width="560" height="315" src="http://www.youtube./embed/$1" frameborder="0" allowfullscreen></iframe>';
$text = preg_replace($search, $replace, $text);
return $text;
}
hello i need same code but my content got html + youtube url
so i update reg pattern
private function generateVideoEmbeds($text)
{
// No youtube? Not worth processing the text.
if ((stripos($text, 'youtube.') === false) && (stripos($text, 'youtu.be') === false))
{
return $text;
}
$replace = '<iframe width="560" height="315" src="http://www.youtube./embed/$1" frameborder="0" allowfullscreen></iframe>';
$text = preg_replace("/http:\/\/(www.)?(youtube.|youtube.be)\/watch\?v=[\w]{8,25}[^< ]/si", $replace, $text);
return $text;
}
本文标签: phpReplace YouTube Link with video PlayerStack Overflow
版权声明:本文标题:php - Replace YouTube Link with video Player - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745446054a2658668.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论