-1

なんらかの方法でリダイレクトされた場合にURLをテストする関数が必要です。

これまで、cURLを使用してヘッダーリダイレクトをキャッチしてきましたが、リダイレクトを実現する方法は明らかに他にもあります。

例えば。

<meta http-equiv="refresh" content="0;url=/somewhere/on/this/server" />

またはJSスクリプト

window.location = 'http://melbourne.ag';

誰かがそれらすべてをカバーする解決策を持っているかどうか疑問に思いました。私は私の仕事を続け、結果をここに投稿します。

また、構文解析の簡単な方法

<meta http-equiv="refresh"... 

PHPでは誰ですか?

これはPHPのネイティブget_meta_tags()に含まれると思いました...しかし私は間違っていると思いました:/

4

2 に答える 2

0

マークアップ言語では実行できますが(単純なマークアップパーサーであれば実行できます)、JavaScriptなどのプログラミング言語では一般的に実行できません。

Webドキュメント内のプログラムでのリダイレクトは、そのプログラムを停止することと同じです。別の任意のプログラムが停止するかどうかを判断できるプログラムを求めています。これは、コンピュータサイエンスでは、最初の決定不可能な問題である停止問題として知られています。

つまり、リダイレクトが発生するかどうかは、リソースのサブセットに対してのみ正しく伝えることができます。

于 2012-09-12T09:16:37.117 に答える
-1

途中で、JSチェックを書いたときに追加します...

 function checkRedirect($url){
    // returns the redirected URL or the original
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    $out = curl_exec($ch);

    $out = str_replace("\r", "", $out);

    $headers_end = strpos($out, "\n\n");
    if( $headers_end !== false ) { 
        $out = substr($out, 0, $headers_end);
    }   

    $headers = explode("\n", $out);
    foreach($headers as $header) {
        if(strtolower(substr($header, 0, 10)) == "location: " ) { 
            $target = substr($header, 10);
            return $target;
        }   
    }   

     return $url;
 }
于 2012-10-06T05:35:27.267 に答える