URL からクエリ文字列を削除しようとしていますが、最初のキー/変数をそのままにしておく必要があります。したがって、アンパサンドの最初の出現が、クエリ文字列を破棄したいポイントであることを知っています。これを行う最善の方法は何ですか?以下は私のコードです。現在、クエリ文字列に追加し続けています。
<a href="<?php echo $_SERVER["REQUEST_URI"] ?>&sortkey=year&sortval=asc">
URL からクエリ文字列を削除しようとしていますが、最初のキー/変数をそのままにしておく必要があります。したがって、アンパサンドの最初の出現が、クエリ文字列を破棄したいポイントであることを知っています。これを行う最善の方法は何ですか?以下は私のコードです。現在、クエリ文字列に追加し続けています。
<a href="<?php echo $_SERVER["REQUEST_URI"] ?>&sortkey=year&sortval=asc">
最初のアンパサンドに到達するまで、アンパサンド以外のすべてを単純に照合できます。例えば
$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 を使用するよりもはるかに高速です。
私があなたの質問を正しく理解していれば、最初に出現したアンパサンド以降のすべてを削除してください。次のようなものを使用できます。
<?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
これは、 が最初に出現する前のものです&
。
strposは機能しますが、RewriteRuleを使用していない限り、$ _SERVER['SCRIPT_NAME']または$_SERVER['PHP_SELF']で十分です(おそらくより効率的です)。
URLが書き換えられている場合は、$ _SERVER['REDIRECT_URL']の方が適切です。
編集:クエリ文字列の最初の部分を保持することについてのビットを逃しました:s