почему я получаю запрос дважды - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь в основном извлечь? V = (часть запроса) URL-адреса youtube.com ... это автоматически вставлять видео, когда кто-то вводит URI youtube.com (то есть кто-то вводит http://www.youtube.com/?v=xyz, эта программа должна автоматически вставить ее на страницу).

В любом случае, когда я запускаю следующий код, я получаю два запроса (запросов) для первого URI:

<?php
//REGEX CONTROLLER:

//embedding youtube:
function youtubeEmbedd($text)
{
    //scan text and find:
        //  http://www.youtube.com/
        //  www.youtube.com/

$youtube_pattern = "(http\:\/\/www\.youtube\.com\/(watch)??\?v\=[a-zA-Z0-9]+(\&[a-z]\=[a-zA-Z0-9])*?)";      //  the pattern

    #"http://www.youtube.com/?v="

    echo "<hr/>";
    $links = preg_match_all($youtube_pattern, $text, $out, PREG_SET_ORDER);     // use preg_replace here

    if ($links)
    {
        for ($i = 0; $i != count($out); $i++) 
        {
            echo "<b><u> URL </b><br/></u> ";

            foreach ($out[$i] as $url)
            {
                // split url[QUERY] here and replaces it with embed code:
                $youtube = parse_url($url);
                echo "QUERY: " . $youtube["query"] . "<br/>";
                #$pos  = strpos($url, "?v=");
            }          
        }
    }    
    else
    {
        echo "no match";
    }
}

youtubeEmbedd("tthe quick gorw fox http://www.youtube.com/watch?v=5qm8PH4xAss&x=4dD&k=58J8 and http://www.youtube.com/?v=Dd3df4e ");

?>

Вывод:

URL QUERY: v=5qm8PH4xAss QUERY: << WHY DOES THIS APPEAR???????????? URL QUERY: v=Dd3df4e

Буду рад любой помощи.

1 Ответ

2 голосов
/ 11 октября 2010

Ваше регулярное выражение сохраняет результат в $out следующим образом:

(
    [0] => Array
        (
            [0] => http://www.youtube.com/watch?v=5qm8PH4xAss
            [1] => watch
        )

    [1] => Array
        (
            [0] => http://www.youtube.com/?v=Dd3df4e
        )

)

В вашем регулярном выражении есть подгруппа для сопоставления текста watch, и поэтому это заканчивается как результат в массиве.

Поскольку вы просматриваете все результаты $out[$i], вы пытаетесь запустить parse_url для второго результата первого совпадения;это приводит к пустому выводу.

Чтобы исправить вашу проблему, просто измените свою итерацию на что-то вроде:

if($links){
    foreach($out as $result){
        $youtube = parse_url($result[0]);
        echo "<b><u> URL </b><br/></u> QUERY: " . $youtube["query"] . "<br/>";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...