Сделать локальную ссылку глобальной /test.php -> example.com/test.php - PullRequest
0 голосов
/ 18 июля 2011

Я работал над алгоритмом паука и у меня были некоторые проблемы со ссылками.

пример того, как это работает:

получил контент от -> example.com/bob/index.php?page=funny+faces

содержание:

<html>
<a href="../jack/index.php"> link 1 </a>
<a href="/bob_more_info"> link 2 </a>
<a href="http://www.youtube.com"> link 3 </a>
</html>

передать контент через функцию получения ссылок

возвращена функция ссылок

[0] = ../jack/index.php

[1] = / bob_more_info

[2] = http://www.youtube.com

теперь мне нужно сделать ссылки такими, по каким страницам я их получил (example.com/bob/index.php?page=funny+faces)

так

[0] -> ../jack/index.php в example.com/jack/index.php

[1] -> / bob_more_info в example.com/bob/bob_more_info

[2] -> http://www.youtube.com

Я запрашиваю функцию, которая может выполнять преобразование. Это мое, но это не всегда работает и становится болью. Если бы вы могли отредактировать его или написать мне функцию, это было бы очень ценно. Заранее спасибо.

Вот моя функция в настоящее время:

//example:
//$newURL = URLfix("example.com/bob/index.php?page=funny+faces", "../jack/index.php");
function URLfix ($url, $ext)
{
    if(is_valid_url($url."/"))
    {
        $url .= "/";
    }
    $ar1 = explode("/", $url);
    if(count($ar1) == 1)
    {
        return $url."/".$ext;
    }
    $target = $ar1[count($ar1) - 1];
    if($target == "")
    {
        return $url.$ext;
    }
    if(strpos(" ".$target, "."))
    {
        $cur = "";
        for($i = 0; $i < count($ar1) - 1; $i ++)
        {
            $cur .= $ar1[$i];
        $cur .= "/";
        }
        return $cur.$ext;
    }
    return $url."/".$ext;
}

Ответы [ 3 ]

0 голосов
/ 18 июля 2011

Существует спецификация, которая шаг за шагом объясняет, как преобразовать относительный URI в его базовый URI.Это RFC 3986 :

Каждая относительная ссылка имеет базовую ссылку, к которой относится.Базовая ссылка - это ссылка на URI.Вы можете разрешить новую ссылку URI из любой базовой ссылки URI и относительной ссылки.Этот процесс называется Относительное разрешение .

Код PHP, который делает это, доступен в пакете Net_URL2 PEAR у него есть пример использования этого ищите ->resolve().

0 голосов
/ 18 июля 2011

так

example.com/jack/index.php

эквивалентно:

example.com/bob/../jack/index.php

Я бы не беспокоился об этой части. Для URL я бы сначала удалил строку запроса, а затем выскочил из последнего сегмента, чтобы получить базовый URL:

list($url, $query_string = explode("?", $url);
$segments = explode("/", $url);
array_pop($segments);
$base_url = implode("/", $segments);

Обязательно добавьте несколько проверок ошибок.

0 голосов
/ 18 июля 2011

используйте explode (), чтобы разбить $ url на массив, разделенный символом /, тогда, например, $ bits [0] будет содержать example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...