我有这个PHP代码可以自动将youtube网址转换为视频:
$search = '%
(?:https?://)?
(?:www\.)?
(?:
youtu\.be/
| youtube\.com
(?:
/embed/
| /v/
| /watch\?v=
| /watch\?feature=player_embedded&v=
)
)
([\w\-]{10,12})
\b
%x';
$replace = "<iframe class=\"youtube-player\" width=\"550\" height=\"385\" src=\"http://www.youtube.com/embed/$1\" data-youtube-id=\"$1\" frameborder=\"0\" allowfullscreen></iframe>";
return preg_replace($search, $replace, $url);
在视频ID之后删除任何内容的最简单方法是什么?
答案 0 :(得分:0)
哇。建议的链接实际上链接到另一个正则表达式。使用parse_url
和parse_str
,这就是他们的目的,请参阅this answer。使用正则表达式is hard解析URL并且没有理由重新发明轮子。
答案 1 :(得分:0)
我找到了一种感谢其他人链接的方式,这是一个搜索文本正文并用视频替换所有YouTube链接的功能:
function youtube($body)
{
$video_pattern = '~(?:http|https|)(?::\/\/|)(?:www.|)(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[a-z0-9;:@#?&%=+\/\$_.-]*~i';
preg_match_all($video_pattern, $body, $matches);
//print_r($matches[0]);
foreach ($matches[0] as $url)
{
if (strpos($url, 'feature=youtu.be') == TRUE || strpos($url, 'youtu.be') == FALSE )
{
parse_str(parse_url($url, PHP_URL_QUERY), $id);
$id = $id['v'];
}
else
{
$id = basename($url);
}
$body = str_replace($url, "<iframe class=\"youtube-player\" width=\"550\" height=\"385\" src=\"http://www.youtube.com/embed/{$id}\" data-youtube-id=\"{$id}\" frameborder=\"0\" allowfullscreen></iframe>", $body);
}
return $body;
}