2012-07-11 153 views
2

我目前正试图通过url检索YouTube视频ID。我创建了一个函数getYoutubeVideoID,它剥离了$url并找到了$sVideoID。问题是,当我回显变量时,我得到一个空值$ sVideoID。如果我将视频ID分配给$sVideoID,我如何得到没有价值的结果?PHP显示来自YouTube的视频ID

<?php 

if($_POST) 
{ 

$url  = $_POST['yurl']; 

function getYoutubeVideoID($url) { 
    $sVideoID = preg_replace('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})  
     (?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w-]*~ix','<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>',$url); 
    return $sVideoID; 
} 

    $hth  = 300; //$_POST['yheight']; 
    $wdth  = 500; //$_POST['ywidth']; 


?> 

<? 
//Iframe code 

echo htmlentities ('<iframe src="http://www.youtube.com/embed/'.$sVideoID.'" frameborder="0" width="'.$wdth.'" height="'.$hth.'"></iframe>'); 

?> 

<? 
//Old way to embed code 
echo htmlentities ('<embed src="http://www.youtube.com/v/'.$sVideoID.'" width="'.$wdth.'" height="'.$hth.'" type="application/x-shockwave-flash" wmode="transparent" embed="" /></embed>'); 
} 
?> 
+0

你可能在URL其他参数和顺序不确定性。例如:http://www.youtube.com/watch?feature=g-all-esi&v=6mgFdn4lfrE – alfasin 2012-07-11 21:20:44

+0

你在哪里设置'$ sVideoID'? – 2012-07-11 21:31:36

+0

可能重复的[PHP的正则表达式的YouTube视频ID](http://stackoverflow.com/questions/11438544/php-regex-for-youtube-video-id) – mario 2012-07-11 22:45:17

回答

2

也许我错了,也许你没有包含所有的相关数据,但我没有看到你的代码w中的任何地方在这里你执行你创建的功能。

而不是目前你在做什么,试试这个:

echo htmlentities ('<iframe src="http://www.youtube.com/embed/'.getYoutubeVideoID($url).'" frameborder="0" width="'.$wdth.'" height="'.$hth.'"></iframe>'); 

你不能简单地定义一个函数,它会执行并分配变量..你有什么所具有的功能,在执行时,在它的位置返回一个变量。举个例子,你可以分配$ VAR的功能return value

$var = getYoutubeVideoID($url); 

,而不是很以上,你甚至可以尝试这个办法:

$sVideoID = getYoutubeVideoID($url); 

最后,而不是使用正则表达式像其他人那样注意,你可以结合使用parse_url()parse_str()从您的网址,以获取数据:

$arr = parse_url($url); 
parse_str($arr['query'], $output); 
echo $output['v']; 
+1

谢谢!我是php的新学习者。但我使用正则表达式的原因是YT URL有很多格式。我尝试过'parse_str',但它不够用。 – CodingWonders90 2012-07-11 21:42:36

+0

@ user1519101我明白了;好吧,我很高兴能够帮到你。 – Daedalus 2012-07-11 21:44:16

2

为什么我收到没有价值的结果为$ sVideoID

你永远不分配它(至少在你提供的代码)。 $sVideoID的代码位于用户定义的函数中 - getYoutubeVideoID()。你从来没有打过电话。 Daedalus在他的答案中提供了一个样本分辨率。

另一方面...不要使用正则表达式解析URL。还有其他的,更简单的方法

例如:

+0

作为提到达达卢斯我使用正则表达式的原因是YT网址有很多格式。我尝试过parse_str,但它不够用。 – CodingWonders90 2012-07-11 21:44:37

+0

格式改变的事实是正则表达式是一个糟糕的解决方案的主要原因。使用这些功能将URL分开很容易,并且使用代码逻辑来提取视频ID。 – 2012-07-12 03:18:11