PHP 检索 YouTube ID + 删除某些参数的函数

PHP Function to Retrieve YouTube ID + Remove Certain Parameters

我有一个函数可以解析 YouTube URL 以检索视频 ID,然后为大多数用例生成干净的嵌入代码。如果我将 URL 传递给它,其中 time_continue 存在,例如 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/",
    $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>

这是 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

要将watch替换为embed,只需替换'path'部分...

$embedURL = $url_parts['scheme'] . '://' . $url_parts['host'] . 
        "/embed/" . $params['v'];