この記事は、最後の更新から2441日を超えています。

2018.2.7 / 2018.2.9 update

【PHP】URLパラメータを追加・削除・上書きする関数


概要

同一ページで言語の切り替えを行ったり、前のページの情報を渡したりする場合に、URLパラメータを使う場合があります。
※URLパラメータ・・・例えば「http://example.com?page=10」の「?page=10」の部分です。

これを毎回現在のページのパラメータをチェックして書き換え・追加・削除するのは面倒です。
なので僕は大体php用に作った関数を使って処理しています。

関数

下記関数をコピペして使ってください。


<?php
function url_param_change($par=Array(),$op=0){
    $url = parse_url($_SERVER["REQUEST_URI"]);
    if(isset($url["query"])) parse_str($url["query"],$query);
    else $query = Array();
    foreach($par as $key => $value){
        if($key && is_null($value)) unset($query[$key]);
        else $query[$key] = $value;
    }
    $query = str_replace("=&", "&", http_build_query($query));
    $query = preg_replace("/=$/", "", $query);
    return $query ? (!$op ? "?" : "").htmlspecialchars($query, ENT_QUOTES) : "";
}
?>

使い方

主な使い方は以下のとおりです。
第1引数は、パラメータ名と内容の連想配列で渡します。
内容にnullを入れると、そのパラメータを削除できます。
返り値は、URLの?以下の部分の文字列です(?page=10 など)
第2引数は省略できます。第2引数に1を指定した場合は、返り値の先頭の?を返しません。


<?php
// 追加または上書き
$url_param = url_param_change(Array("パラメータ名"=>"追加または上書きする内容"));

// 削除
$url_param = url_param_change(Array("削除するパラメータ名"=>null));

// 第2引数を指定
$url_param = url_param_change(Array("パラメータ名"=>"内容"),1);
?>

取得例

実際にURLを使った場合の取得例は以下のとおりです。


<?php
/*****************************************************************
    以下「http://example.com/?param1=100&param2=200」にアクセスしたと過程
*/

// 追加・上書き
// パラメータが存在していれば上書きされる。存在していなければ追加される
// 返り値:?param1=hoge&param2=200&param3=999
$url_param = url_param_change(Array("param1"=>"hoge","param3"=>"999"));

// 削除
// 返り値:?param2=200
$url_param = url_param_change(Array("param1"=>null));

// 先頭の?を消す
// 第2引数に1を指定することで、先頭の?を消すことができる
// 返り値:param1=hoge&param2=200
$url_param = url_param_change(Array("param1"=>"hoge"),1);
?>

実践例

実際に使う場合は、取得したパラメータの文字列をURLの最後につけるなどしてください。


<?php $url_param = url_param_change(Array("lang"=>"jp")); ?>
<a href="http://example.com/<?php echo $url_param; ?>">日本語ページに移動する</a>

関連記事