我有一个函数可以解析YouTube URL来检索视频id,然后它会为大多数用例生成干净的嵌入代码。如果我向它传递一个存在time_continue的URL,比如https://www.youtube.com/watch?time_continue=79&v=2uBDNhe6Gkk&feature=emb_title,那么嵌入就会中断
if(isset($_POST['submit'])){
$embedURL = mysqli_real_escape_string($con, $_POST['embedCode']);
function convertYoutube($string) {
return preg_replace(
"'#(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\-nocookie\.com\/embed\/|youtube\.com\/(?:embed\/|v\/|e\/|\?v=|shared\?ci=|watch\?v=|watch\?.+&v=))([-_A-Za-z0-9]{10}[AEIMQUYcgkosw048])\S*#s'",
"\https://www.youtube.com/embed/$2",
$string
);
}
$embedURL = convertYoutube($embedURL);
$embedCode = "<div class=''embed-responsive embed-responsive-16by9''><iframe class=''embed-responsive-item'' src=''$embedURL'' allowfullscreen></iframe></div>";
}代码生成以下代码(它没有去掉我需要删除的time_continue和feature=emb_title参数)。
<div class='embed-responsive embed-responsive-16by9'><iframe class='embed-responsive-item' src='https://www.youtube.com/watch?time_continue=79&v=2uBDNhe6Gkk&feature=emb_title' allowfullscreen></iframe></div>我希望函数将其格式化为下面没有参数的嵌入代码。谢谢
<div class='embed-responsive embed-responsive-16by9'><iframe class='embed-responsive-item' src='https://www.youtube.com/embed/2uBDNhe6Gkk' allowfullscreen></iframe></div>发布于 2020-05-06 13:50:17
这是已经在SO上的一些其他问题的一部分,但由于你有它们的组合,所以我想我会把它们放在一起回答,而不是试图在评论中解释它。
第一部分是使用parse_url()将URL分成不同的部分。然后使用字符串的查询部分,使用parse_str()对其进行解析,以分离出所有参数。然后将相关部分组合到新的URL中...
$url_parts = parse_url($embedURL);
parse_str($url_parts['query'], $params);
$embedURL = $url_parts['scheme'] . '://' . $url_parts['host'] .
$url_parts['path']."/".$params['v'];这给了..。
https://www.youtube.com/watch/2uBDNhe6Gkk要用embed替换watch,只需替换'path'部件...
$embedURL = $url_parts['scheme'] . '://' . $url_parts['host'] .
"/embed/" . $params['v'];https://stackoverflow.com/questions/61627920
复制相似问题