2

是否可以通过 PHP 或 JS 减小链接的大小(以文本形式)?

例如,我可能有这样的链接:

http://www.example.com/index.html                     <- Redirects to the root
http://www.example.com/folder1/page.html?start=true   <- Redirects to page.html
http://www.example.com/folder1/page.html?start=false  <- Redirects to page.html?start=false

目的是找出链接是否可以缩短并仍然指向同一位置。在这些示例中,可以减少前两个链接,因为第一个指向根,第二个具有可以省略的参数。
第三个链接就是这种情况,其中参数不能省略,这意味着除了删除http://.

所以上面的链接会像这样减少:

Before: http://www.example.com/index.html
After:  www.example.com

Before: http://www.example.com/folder1/page.html?start=true
After:  www.example.com/folder1/page.html

Before: http://www.example.com/folder1/page.html?start=false
After:  www.example.com/folder1/page.html?start=false

这可以通过 PHP 或 JS 实现吗?

笔记:

www.example.com不是我拥有或通过 URL 访问的域。这些链接可能是未知的,我正在寻找一个类似于自动链接缩短器的东西,它可以通过获取 URL 而不是其他东西来工作。

实际上,我正在考虑类似链接检查器之类的东西,它可以检查链接在自动修剪之前和之后是否有效,如果没有,那么将在链接的修剪较少的版本中再次进行检查。但这似乎有点矫枉过正......

4

3 回答 3

1

由于您想自动执行此操作,并且您不知道参数如何更改行为,因此您必须通过反复试验来做到这一点:尝试从 URL 中删除部分,并查看服务器是否以不同的页面响应.

在最简单的情况下,这可能会像这样工作:

<?php
    $originalUrl = "http://stackoverflow.com/questions/14135342/reduce-link-url-size";

    $originalContent = file_get_contents($originalUrl);

    $trimmedUrl = $originalUrl;

    while($trimmedUrl) {
        $trialUrl = dirname($trimmedUrl);
        $trialContent = file_get_contents($trialUrl);
        if ($trialContent == $originalContent) {
            $trimmedUrl = $trialUrl;
        } else {
            break;
        }
    }

    echo "Shortest equivalent URL: " . $trimmedUrl;
    // output: Shortest equivalent URL: http://stackoverflow.com/questions/14135342
?>

对于您的使用场景,您的代码会稍微复杂一些,因为您必须依次测试每个参数以查看是否有必要。有关起点,请参阅parse_url()parse_str()函数。

请注意:此代码非常慢,因为它会对您要缩短的每个 URL 执行大量查询。此外,它可能无法缩短许多 URL,因为服务器可能在响应中包含时间戳等内容。这使得问题变得非常困难,这就是为什么像谷歌这样的公司有很多工程师考虑这样的事情:)。

于 2013-01-03T09:07:50.393 回答
0

是的,这是可能的:

JS:

var url = 'http://www.example.com/folder1/page.html?start=true';
url = url.replace('http://','').replace('?start=true','').replace('/index.html','');

php:

$url = 'http://www.example.com/folder1/page.html?start=true';
$url = str_replace(array('http://', '?start=true', '/index.html'), "", $url);

(其中的每一项array()都将替换为""

于 2013-01-03T08:38:14.967 回答
0

这是给你的JS。

function trimURL(url, trimToRoot, trimParam){
    var myRegexp = /(http:\/\/|https:\/\/)(.*)/g;
    var match = myRegexp.exec(url);
    url = match[2];
    //alert(url);  // www.google.com
    if(trimParam===true){
        url = url.split('?')[0];
    }
    if(trimToRoot === true){
        url = url.split('/')[0];
    }
    return url
}

alert(trimURL('https://www.google.com/one/two.php?f=1'));
alert(trimURL('https://www.google.com/one/two.php?f=1', true));
alert(trimURL('https://www.google.com/one/two.php?f=1', false, true));

小提琴:http: //jsfiddle.net/5aRpQ/

于 2013-01-03T08:46:11.740 回答