我运行了一个论坛,希望使用youtube视频播放器自动替换任何YouTube视频的链接。我无法在ineternet上找到这样的东西,但我已经在Wordpress中看到了它。
我正在运行PHP。
这就是我所说的:
答案 0 :(得分:2)
关于正确使用Youtube视频ID的问题有很多很多问题 - 只需进行Google或网站搜索即可。我冒昧地修改this answer by ridgerunner来做你想做的事,即。使用嵌入代码替换Youtube URL。如果需要,请查看并编辑模式或嵌入代码。例如,您可能希望将嵌入的视频包装在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.com or
(?:-nocookie)? # youtube-nocookie.com
\.com # 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.com/v/$1?fs=1"</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowScriptAccess" value="always"></param>
<embed src="http://www.youtube.com/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.com/watch?v=NLqAF9hrVbY'."\n".
'http://www.youtube.com/v/u1zgFlCw8Aw?fs=1&hl=en_US';
echo embedYoutube($string);
?>
答案 1 :(得分:1)
您不需要手动生成可嵌入的HTML,Youtube支持oEmbed协议:http://oembed.com/#section5
答案 2 :(得分:0)
您可以尝试使用一个小类来生成玩家的代码 - http://github.com/chernikovalexey/Livar。我发现它很有趣;)
答案 3 :(得分:0)
这是我的Viktor修改版本
/**
* Finds youtube videos links and makes them an embed.
* search: http://www.youtube.com/watch?v=xg7aeOx2VKw
* search: http://www.youtube.com/embed/vx2u5uUu3DE
* search: http://youtu.be/xg7aeOx2VKw
* replace: <iframe width="560" height="315" src="http://www.youtube.com/embed/xg7aeOx2VKw" frameborder="0" allowfullscreen></iframe>
*
* @param string
* @return string
* @see http://stackoverflow.com/questions/6621809/replace-youtube-link-with-video-player
* @see http://stackoverflow.com/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\.com # or youtube.com
(?: # 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.com/embed/$1" frameborder="0" allowfullscreen></iframe>';
$text = preg_replace($search, $replace, $text);
return $text;
}
答案 4 :(得分:0)
你好,我需要相同的代码,但我的内容得到了html + youtube url
所以我更新了reg模式
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.com/embed/$1" frameborder="0" allowfullscreen></iframe>';
$text = preg_replace("/http:\/\/(www.)?(youtube.com|youtube.be)\/watch\?v=[\w]{8,25}[^< ]/si", $replace, $text);
return $text;
}