建立本地链接全球/test.php - > example.com/test.php

时间:2011-07-18 16:04:15

标签: php url hyperlink local

我一直在研究蜘蛛算法,并且在链接方面遇到了一些问题。

它的工作原理示例:

从 - >获取内容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] - &gt; ../jack/index.php 进入 example.com/jack/index.php

     

[1] - &gt; / bob_more_info 进入 example.com/bob/bob_more_info

     

[2] - &gt; 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 :(得分:0)

使用explode()将$ url拆分为由/分隔的数组,然后$ bits [0]例如将包含example.com

答案 1 :(得分:0)

存在一个规范,它逐步解释如何解析与其基URI相关的URI。这是RFC 3986

每个相对引用都有一个引用的基本引用。基准引用是URI引用。您可以从任何基URI引用和相对引用中解析新的URI引用。此过程称为Relative Resolution

执行此操作的PHP代码可在Net_URL2 PEAR Package an example how to use this查找->resolve()中找到。

答案 2 :(得分:0)

因为

example.com/jack/index.php

相当于:

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

我不担心那部分。对于网址,我会首先删除查询字符串,然后弹出最后一段以获取基本网址:

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

请务必添加一些错误检查。