PHP Функция получения идентификатора YouTube + удаление некоторых параметров - PullRequest
0 голосов
/ 06 мая 2020

У меня есть функция, которая анализирует URL-адрес YouTube для получения идентификатора видео, а затем генерирует чистый код встраивания для большинства случаев использования. Встраивание прерывается, если я передаю ему 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/$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>

1 Ответ

1 голос
/ 06 мая 2020

Это часть нескольких других вопросов, уже касающихся SO, но, поскольку у вас есть их комбинация, я подумал, что смогу собрать и ответить вместе, вместо того, чтобы пытаться объяснить это в комментарии.

Первый часть будет разделить URL-адрес на части, используя parse_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'];
...