2016-05-12 16 views
3

Wie kann ich eine YouTube-ID aus dieser URL extrahieren?So extrahieren Sie die YouTube-ID aus dieser URL

https%253A%252F%252Fwww.youtube.com%252Fwatch%253Fv%253Dnn5hCEMyE-E 

habe ich versucht, diese Regex:

$url = $_GET["q"]; 
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches); 

Antwort

13

es erste Decode und der zweite Index verwenden ([1]) des Arrays matches:

if(isset($_GET["q"])) 
{ 
    $url = urldecode(rawurldecode($_GET["q"])); 
    # https://www.youtube.com/watch?v=nn5hCEMyE-E 
    preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches); 
    echo $matches[1]; 
    # nn5hCEMyE-E 
} 
2

die Sie interessieren (vergessen Sie nicht urldecode(rawurldecode($url)) machen, bevor sie passieren funktionieren)

/* 
    * get youtube video ID from URL 
    * 
    * @param string $url 
    * @return string Youtube video id or FALSE if none found. 
    */ 
    function youtube_id_from_url($url) { 
      $pattern = 
       '%^# Match any youtube URL 
       (?:https?://)? # Optional scheme. Either http or https 
       (?:www\.)?  # Optional www subdomain 
       (?:    # Group host alternatives 
        youtu\.be/ # Either youtu.be, 
       | youtube\.com # or youtube.com 
        (?:   # Group path alternatives 
        /embed/  # Either /embed/ 
        | /v/   # or /v/ 
        | /watch\?v= # or /watch\?v= 
       )    # End path alternatives. 
       )    # End host alternatives. 
       ([\w-]{10,12}) # Allow 10-12 for 11 char youtube id. 
       $%x' 
       ; 
      $result = preg_match($pattern, $url, $matches); 
      if ($result) { 
       return $matches[1]; 
      } 
      return false; 
     } 
Verwandte Themen