2012-04-24 12 views
1

URLからクエリ文字列を削除しようとしていますが、最初のキー/ varをそのまま残す必要があります。だから私は、最初のアンパサンドの出現箇所がクエリ文字列を破棄したい点であることを知っています。これを行う最善の方法は何でしょうか?以下は私のコードですが、現在はクエリ文字列に追加されています。最初のアンパサンドの後にクエリ文字列の残りを取り除く

<a href="<?php echo $_SERVER["REQUEST_URI"] ?>&sortkey=year&sortval=asc"> 

答えて

1

私が正しくあなたの質問を理解する場合は、アンパサンドの第一発生後、すべてを取り除くしたいと思います。

<?php 
$uri = 'blah.blah.com?a=b&sortkey=year&sortval=asc'; 
$new_uri = preg_replace("/([^&]+)&(.*)/", "$1", $uri) 
?> 

パターン:あなたはこのようなものを使用することができます

([^&]+) : Match everything except '&' 
&  : First '&' 
(.*) : Any thing after that 

&の最初に出現する前に何である第一グループ($1)、に置き換えられます。

0

関数では、アンパサンドの位置を見つけます。次に、substr関数を使用して、そのポイントまでURLの一部を取得します。

0

strposが動作しますが、RewriteRuleを使用している場合を除き、$ _SERVER ['SCRIPT_NAME']または$ _SERVER ['PHP_SELF']で十分です(おそらく効率的です)。

URLが書き換えられる場合は、$ _SERVER ['REDIRECT_URL']が適切です。

編集:私は、クエリ文字列の最初の部分を維持について少しを逃した。■

2

最初のアンパサンドが表示されるまで、アンパサンドではないすべてのものと簡単にマッチングできます。例えば。

$incomingURI = 'http://www.example.com/?id=12&left=right&up=down'; 
preg_match('/[^&]+/', $incomingURI, $match); 
$outgoingURI = $match[0]; 

上記のコードでは、変数$ outgoingURIで出力を次のようになります。

http://www.example.com/?id=12 

これはにpreg_replaceを使用するよりもはるかに高速になります。

+0

これは受け入れられる回答である必要があります。しかし、正規表現には余分な '+'があります。 – rvighne

+1

@rvighne追加の '+'はタイプミスではありませんでした。 PHPで使われているPCREでは、 '+'が追加されていれば、式は所有的になります。アンパサンドが見つからない場合は、それを元に戻すことはありません。このコードを振り返ってみると、現在は1文字しか探していないため、文字列は小さいですが、倍精度の構文も問題ないので、速度の向上はほとんどありません。 – joe92

関連する問題