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

目的は、リンクを短縮しても同じ場所を指すことができるかどうかを調べることです。これらの例では、最初の 2 つのリンクは縮小できます。最初のリンクはルートを指し、2 番目のリンクには省略可能なパラメーターがあるためです。
3 番目のリンクは、パラメーターを省略できない場合です。つまり、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です。

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 に答える
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 に答える