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'];
我有一个函数可以解析 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'];