【问题标题】:Make a local link global /test.php -> example.com/test.php建立一个本地链接全局 /test.php -> example.com/test.php
【发布时间】:2011-07-18 16:04:15
【问题描述】:

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

工作原理示例:

从 -> 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;
}

【问题讨论】:

  • 基本上我需要把本地链接变成全局链接所以
  • 没问题,你不是第一个遇到这个问题的人,请看下面我的回答。

标签: php url hyperlink local


【解决方案1】:

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

【讨论】:

  • 但是怎么样:从 example.com/bob/index.php?page=funny+faces with link ../bob_more_info 进入示例.com/bob_more_info
【解决方案2】:

因为

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);

一定要添加一些错误检查。

【讨论】:

  • 是的,我试过了。唯一的问题是蜘蛛算法,我不想一次又一次地添加相同的链接,因为 example.com/jack/index.php 和 example.com/bob/../jack/index.php 是不同的字符串并且不相等,example.com/bob/../jack/index.php 将被添加到数据库中。我需要把它变成最简单的形式,这样就不会发生。
【解决方案3】:

存在一个规范,它逐步解释了如何将相对 URI 解析为其基本 URI。我是RFC 3986

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

执行此操作的 PHP 代码在 Net_URL2 PEAR Package 中可用,它有 an example how to use this 查找 -&gt;resolve()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2013-06-09
    • 1970-01-01
    相关资源
    最近更新 更多