PHP code om Youtube of Vimeo video URL uit de content te halen

Voor een website heb ik onderstaande PHP functie geschreven. Deze had ik nodig om uit de content de video URL van bijvoorbeeld Youtube, Vimeo of Dailymotion te halen.

Om de video URL te selecteren maak ik gebruik van een aantal regexes. Je geeft de content aan de functie en het resultaat is de video URL of false bij geen resultaat.

Vergeet niet om het resultaat te sanitizen of te escapen afhankelijk wat je ermee wilt doen.

/**
 * Get the video URL in $content and return it.
 *
 * @param string $content
 * @return bool|string
 */
function custom_get_embededurl(string $content)
{
    $url = false;

    // Youtube.
    if (false !== strpos($content, 'youtube') || false !== strpos($content, 'youtu.be')) {
        $regex = '/.*(((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?).*/i';
        if (preg_match_all($regex, $content, $matches)) {
            $url = (isset($matches[1]) && isset($matches[1][0])) ? $matches[1][0] : false;

            // The regex will not return https:// or https://www so we have to add it manually.
            if (false !== strpos($content, 'youtube')) {
                // For youtube.com links add https://www
                $url = 'https://www.' . $url;
            } else {
                // For youtu.be links add https://
                $url = 'https://' . $url;
            }
        }
    }

    // Vimeo.
    if (false !== strpos($content, 'vimeo')) {
        $regex = '/(http|https)?:\/\/(www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|)(\d+)(?:|\/\?)/i';
        if (preg_match_all($regex, $content, $matches)) {
            $url = (isset($matches[0]) && isset($matches[0][0])) ? $matches[0][0] : false;
        }
    }

    // Dailymotion.
    if (false !== strpos($content, 'dailymotion')) {
        $regex = '/(http|https)?:\/\/(www\.dailymotion\.com\/video\/(\w+))/i';
        if (preg_match_all($regex, $content, $matches)) {
            $url = (isset($matches[0]) && isset($matches[0][0])) ? $matches[0][0] : false;
        }
    }

    return $url;
}

Laat een reactie achter

Your email address will not be published. Required fields are marked *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.