いくつかの異なるGET変数をURLに追加しようとしています。
現在のページのURLへのヘッダーリダイレクトを簡単に行い、$ _ GET ['test']をURLに追加するだけです。
私の問題は、URLにすでにあるGET変数があることです。私がしたいのは:
RLにGET変数があるかどうかを確認
ない場合は、URLの末尾に新しいGET ['test']変数を使用して現在のURLにリダイレクトします。
URLにGET ['test']変数は存在するが存在しない場合は、それらの他のGET値をURLに保持し、GET ['test']変数を完全なURL文字列の最後に追加します
存在する場合、かつURLにGET ['test']変数がある場合、それらの他のGET値をURLに保持し、GET ['test']変数値を新しい値と交換します。
これらの条件をすべて確認するにはどうすればよいですか?
簡単な方法は次のとおりです。
$params = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );
これは、test
が最後にあることを保証するものではありません。奇妙な理由でそれが必要な場合は、次のようにすることができます:
$params = $_GET;
unset( $params['test'] );
$params['test'] = 'testvalue';
$new_query_string = http_build_query( $params );
ただし、PHPクエリ文字列パラメータの解析には、他のアプリケーションとの相互運用性の問題がある場合があります。特にPHPは、パラメータに複数の値を受け入れません配列のような名前でない限り。
次に、転送することができます
( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) .
( empty( $_SERVER['HTTP_Host'] ) ? $defaultHost : $_SERVER['HTTP_Host'] ) .
$_SERVER['REQUEST_URI'] . '?' . $new_query_string
私はこの単純なPHP関数Artefactoの回答に基づいて作成しました。
function addOrUpdateUrlParam($name, $value)
{
$params = $_GET;
unset($params[$name]);
$params[$name] = $value;
return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
function request_URI() {
if(!isset($_SERVER['REQUEST_URI'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
if($_SERVER['QUERY_STRING']) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
}
return $_SERVER['REQUEST_URI'];
}
$_SERVER['REQUEST_URI'] = request_URI();
礼儀: http://php.net/manual/en/reserved.variables.server.php LOLによる例
これにより、GETパラメータとともにルートに関するURLが提供されます。
現在のディレクトリに関して必要な場合は、以下を追加します。
$current_url = explode("/", $_SERVER['REQUEST_URI']);
$current_url = $current_url[end(array_keys($current_url))];
それは単にJoomlaの理由かもしれませんが、以下を使用することで同じ値を取得します
$ currenturl = $ _SERVER ['REQUEST_URI'];
はるかに少ないコード。
これが最も簡単な方法です
function buildUrl($name, $value)
{
$_GET[$name] = $value;
return $_SERVER['SCRIPT_NAME'] . '?' . http_build_query($_GET);
}
新しいクエリパラメータをURLに追加するか、既に存在する場合はその値を更新します
これを書いたのは、他のソリューションとは異なり、htaccessの書き換えから隠されたGETパラメーターを公開しないためです。ただし、既存のパラメーターは更新されません。
function addUrlParam($name, $value)
{
$url = $_SERVER['REQUEST_URI'];
$val = $name . '=' . urlencode($value);
if (strpos($url, '?') !== false) {
$url .= '&' . $val;
} else {
$url .= '?' . $val;
}
return $url;
}
..
$newval = 'whatever';
if( !count($_GET) ) {
header('Location: ?test=' . $newval);
exit;
}
if(!isset($_GET['test'])) {
$_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;