我目前正在尝试通过网址检索YouTube视频ID。我创建了一个功能getYoutubeVideoID
,用于删除$url
并找到$sVideoID
。问题是,当我回显变量时,我得到$ sVideoID的空值。如果我为$sVideoID
分配视频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 :(得分:2)
为什么我没有获得$ sVideoID的价值结果
您永远不会分配它(至少不在您提供的代码中)。 $sVideoID
的代码位于用户定义的函数 - getYoutubeVideoID()
中。你永远不会打电话。 Daedalus 在他的回答中提供了一个样本分辨率。
暂且没有...... 请勿使用正则表达式解析网址。还有其他更简单的方法
例如:
parse_url()
query
上explode()
或parse_str()
答案 1 :(得分:2)
也许我错了,或者您没有包含所有相关数据,但我没有在您的代码中看到执行您创建的功能的任何地方。
请尝试以下方法,而不是您目前正在做的事情:
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'];