2011-07-26 13 views
0
function getUrlCurrently() { 
    $pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 

if ($_SERVER["SERVER_PORT"] != "80") { 
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
} else { 
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
} 
return $pageURL; 
} 

この機能を使用して、ページの現在のURLを特定しています。この関数を拡張して、あらかじめ決められた$ _GETパラメータを設定解除できるかどうかを知りたいです。PHPはパラメータを設定解除しますか?

すべての$ _GET値は配列に格納されます。だから私は

$my_array[0] 

を使用して、特定の値にアクセスすることができ、このタスクを達成するために、私の提案ロジックを使用することは現実的で、それは高価であり、ではありませんか?

EDIT:URLを印刷してリンクとして使用したいだけです。
私のURLにはGETパラメータがあります。

+0

ない、あなたの関数がGETパラメータで何もしないように運転しているものを確認してください。 – Treffynnon

+0

私のURLには、複数のGET分光計があります。 –

+0

それはそれを明確にしません。 – Treffynnon

答えて

2

更新:

function getUrlCurrently($filter = array()) { 
    $pageURL = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://"; 

    $pageURL .= $_SERVER["SERVER_NAME"]; 

    if ($_SERVER["SERVER_PORT"] != "80") { 
     $pageURL .= ":".$_SERVER["SERVER_PORT"]; 
    } 

    $pageURL .= $_SERVER["REQUEST_URI"]; 


    if (strlen($_SERVER["QUERY_STRING"]) > 0) { 
     $pageURL = rtrim(substr($pageURL, 0, -strlen($_SERVER["QUERY_STRING"])), '?'); 
    } 

    $query = $_GET; 
    foreach ($filter as $key) { 
     unset($query[$key]); 
    } 

    if (sizeof($query) > 0) { 
     $pageURL .= '?' . http_build_query($query); 
    } 

    return $pageURL; 
} 

// gives the url as it is 
echo getUrlCurrently(); 

// will remove 'foo' and 'bar' from the query if existent 
echo getUrlCurrently(array('foo', 'bar')); 
+0

ありがとうございます。これが私が目指していたものです。 –

6

ないあなたが本当にこれで何をしたいのか確認してください、しかし$_GET(および他のスーパーグローバル)読み取り専用されていません。

  • あなたがそれらに値を追加することができ、
  • することができますが
  • さらに、unset()の値を使用することもできます。

注意、しかし、$_GETを修正することが多いの良い習慣と見なされていないこと:1はいくつかのコードを読み取ると、彼はURLのパラメータから来て$_GETに何を期待 - あなたのコードからしていません。例えば


、あなたは絶対にこのような何かを行うことができます。

unset($_GET['my_item']); 
0

は、それがユーザー$_SERVER['SCRIPT_URI']が容易ではないでしょうか?
クエリパラメータのない完全なURLを返します。配列の試みでGETパラメータとのリンク組み立てること

1

を参照してください。 EDIT

function GetCurrentUrl($debug=FALSE) { 

    $pageURL = (strtolower($_SERVER["HTTPS"]) == "on") ? "https://" : "http://"; 

    if ($_SERVER["SERVER_PORT"] != "80") { 
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
    } 
    else { 
     $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
    } 

    // DEBUG 
    if ($debug) { 
     $msg = "DEBUG MODE: current URL= ".$pageURL ; 
     if (function_exists('debug_msg')) { 
      debug_msg($msg , $debug) ; 
     }else { 
      echo $msg ; 
     } 

    } 

    return $pageURL; 
} 
:あなたはこのように、既存のグローバルデータ$ _SERVER、またはのgetenvを使用することができますが、あなたは$ _GETの文を使用すると、どこから来ている私が参照してください。あなたは、URIの内容にいくつかのパラメータを意味します。あなたは http_build_query

EDIT2を使用して、として、より良い提案$ _SERVER [「REQUEST_URI」]、またはによってそれらを得るでしょう: をその上で、あなたの質問の一点に関して、あなたはまた、程度の作業を追加することができますthis php manual interesting exampleに記載されているような「書き換え」のような機能をセットアップします。あなたの関数へ

関連する問題