2

我目前正在尝试通过 url 检索 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>');
}
?>
4

2 回答 2

2
于 2012-07-11T21:25:58.793 回答
2

也许我错了,或者您没有包含所有相关数据,但是我在您的代码中没有看到您执行创建的函数的任何地方。

而不是你目前正在做的,试试这个:

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

你不能简单地定义一个函数,它会执行并分配变量。你所拥有的函数,当它被执行时,在它的位置返回一个变量。例如,您可以return value为您的函数分配 $var :

$var = getYoutubeVideoID($url);

而不是上面的,你甚至可以试试这个:

$sVideoID = getYoutubeVideoID($url);

最后,您可以parse_url()结合使用 withparse_str()来从您的 url 中获取数据,而不是像其他人所指出的那样使用正则表达式:

$arr = parse_url($url);
parse_str($arr['query'], $output);
echo $output['v'];
于 2012-07-11T21:30:06.750 回答