PHP:数组比较问题-URL


PHP: Array comparison issue- URLs

我已经把php代码放在一起,它将通知YT视频是有效还是无效。由于我只想要YT域中的URL,所以我设置了一个数组来捕获任何其他URL情况并返回错误。问题是,当我以www.youtube.com/v/NLqAF9hrVbY这样的格式键入URL时,我会得到最后一个回显错误,但当我在该URL前面添加http时,它可以找到。我正在用PHP_URL_HOST检查$url

为什么它不接受没有http的允许域的URL?

PHP

if ($_POST) {
    $url = $_POST['name'];
    if (!empty($url['name'])) {
        $allowed_domains = array(
            'www.youtube.com',
            'gdata.youtube.com',
            'youtu.be',
            'youtube.com',
            'm.youtube.com'
        );
        if (in_array(parse_url($url, PHP_URL_HOST), $allowed_domains)) {
            $formatted_url = getYoutubeVideoID($url);
            $parsed_url = parse_url($formatted_url);
            parse_str($parsed_url['query'], $parsed_query_string);
            $videoID = $parsed_query_string['v'];
            $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $videoID);
            if ($videoID != null) {
                if (strpos($headers[0], '200')) {
                    echo('<div id="special"><span id="resultval">That is a valid youtube video</span></div>');
                }
                else {
                    echo('<div id="special"><span id="resultval">The YouTube video does not exist.</span></div>');
                    return false;
                }
            }
            {
                echo('<div id="special"><span id="resultval">The YouTube video does not exist.</span></div>');
                return false;
            }
        }
        else {
            echo ('<div id="special"><span id="resultval">Please include a video URL from Youtube.</span></div>');
        }
        ?>

parse_url()需要提供有效的url,并提供协议标识符(scheme,例如http)。这就是比较失败的原因。

您可以按如下方式修复此问题。

if(substr($url, 0, 4) != 'http')
$url = "http://".$url;

在执行之前使用以上内容

if(in_array(parse_url($url, PHP_URL_HOST), $allowed_domains)){ ... }