2011-11-14 42 views
2

ユーザー変更ページ言語PHPの問題

$uri = explode('&', $_SERVER['REQUEST_URI']); 
$uri = $uri[0]; 

$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$uri : "http://".$_SERVER['SERVER_NAME'].$uri; 

問題は、私はこのようなリンクを持っている場合、あるとき私は、現在のリンクを取得するには、「現在のURL」機能を使用します。

http://127.0.0.1/index.php?id=shop&id2=13&lang=lt 

id2はもちろん消えます。これについて私は何ができますか? id2に設定して、の2番目に&のように爆発することは可能ですか?

+1

'$ _GET'スーパーグローバルを使ってみましたか?もしそうなら、あなたがそれを使いたくない理由がありますか? – jprofitt

+0

@jprofitt私はOPが最後のGET変数を削除しようとしていると思います。 –

答えて

4

あなたがここに、parse_url機能を使用することができます例です:あなたは、スクリプトのファイル名を取得する場所

$uri = parse_url($_SERVER['REQUEST_URI']); 
$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://'; 
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?' . (isset($uri['query']) ? $uri['query'] : ''); 

私はあなたのコードでは表示されませんでした、私は$_SERVER['SCRIPT_NAME']を使用しました。

編集:私の間違いとして、最後に$_GETパラメータを操作/削除する必要があるとは思われませんでした。ここに、parse_strと一緒に上記と同様の方法を使用してそれを行う方法の例があります。このメソッドは、langパラメータの場所に関係なく機能しますが、クエリ文字列の最後の文字列である必要はありません。 parse_urlへの余分な呼び出しをなくし番目のバージョンでの改善のための@Yzmirラミレスへ

$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://'; 

$params = array(); 
if(isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) 
{ 
    parse_str($_SERVER['QUERY_STRING'], $params); 
    $params['lang'] = 'anything'; 
    // unset($params['lang']); // This will clear it from the parameters 
} 

// Now rebuild the new URL 
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . (!empty($params) ? ('?' . http_build_query($params)) : ''); 

感謝。

+0

答えに 'parse_str($ _ SERVER ['QUERY_STRING'])'を使うつもりでしたが、私はあなたの解決策が 'parse_url()'の方が良いと思います。 +1 –

+0

REQUEST_URIは相対URLです。 'parse_url'は動作しません。 – andrewtweber

+0

@andrewtweber - 両方のサーバで動作しますか? – nickb

0
$uri = explode('&', '/index.php?id=shop&id2=13&lang=lt'); 
$uri = $uri[0]; 
echo $uri; //echos /index.php?id=shop 

あなただけのクエリ文字列を取得するために

$_SERVER['QUERY_STRING'] 

を使用したいと思います。すべての変数を保持したい場合は、$ uriを爆発に設定してから、foreachを使って繰り返します。

$uri = explode('&', $_SERVER['QUERY_STRING']; 
foreach ($uri as $var_val) { 
    $var_val = explode('=', $var_val); 
    $var = $var_val[0]; 
    $val = $var_val[1]; 
} 
0

これを試してみてください:http://codepad.org/cEKYTAp8

$uri = "http://127.0.0.1/index.php?id=shop&id2=13&lang=lt"; 

$uri = substr($uri, 0, strrpos($uri, '&')); 

var_dump($uri); // output: string(41) "http://127.0.0.1/index.php?id=shop&id2=13" 
0

これは私がいつも使っていたコードですが、ポートもサポートしています。

$protocol = (!isset($_SERVER["HTTPS"]) || strtolower($_SERVER["HTTPS"]) == "off") ? "http://" : "https://"; 
$port = ((isset($_SERVER["SERVER_PORT"]) && 
    // http:// protocol defaults to port 80 
    (($_SERVER["SERVER_PORT"] != "80" && $protocol == "http://") || 
    // https:// protocol defaults to port 443 
    ($_SERVER["SERVER_PORT"] != "443" && $protocol == "https://")) && 
    // Port is not in http host (port is followed by : at end of address) 
    strpos($_SERVER["HTTP_HOST"], ":") === false) ? ":" . $_SERVER["SERVER_PORT"] : ''); 

return $protocol . $_SERVER["HTTP_HOST"] . $port . $_SERVER["REQUEST_URI"];