[php]URLのパラメータを取得して編集したりする方法

あると便利。

やりたいこと

現在のURLについてるパラメータを取得して編集する。

$_GET[]だと指定したkeyしか拾えないからよくない、他にもkeyがあったら全部拾ってくる。

全部取ってきて一部を編集する、みたいなことをしたい。

想定としては絞り込み検索とかで使いたい。

参考元

これがあれば解決する。

【PHP】URLパラメータを追加・削除・上書きする関数 | dgcolor
URLパラメータを簡単に追加・削除・上書きするためのPHP関数を紹介します。

使い方例

これでアクセスしたとして

https://example.com/?&page=3&test1=aaaaa&test2=eeeee

中身をこんな感じにしたとして

<?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) : "";
    }

    $page = $_GET['page'];
    print url_param_change(Array("page"=> intval($page) - 1));

出力はこうなる。

?&page=2&test1=aaaaa&test2=eeeee

書き出されるのはパラメータ部分だけなので注意が必要。

絶対パスに補完する癖を付けるのが無難ですね。

print 'https://example.com/'.url_param_change(Array("page"=> intval($page) - 1));

その他の取得方法

取得したパラメータをどう料理するかなんですよ。

URLを改造してまたURLで出したいなら前項。
値を拾ってプログラムを書きたいならこちらの内容になってくる。

ほしいパラメータのkeyが決まってるなら基本に忠実に$_GET[]でいい。

$page = $_GET['page'];

if(isset($page)){
    //パラメータがある場合
}

いちいち一個ずつGETするのが嫌な場合もある。
だったらパラメータを配列に格納しちゃう手がある。
連想配列になってるから、あとはkeyを指定して値を取ればいい。

PHPでクエリパラメータを配列として取得する2つの方法 | PisukeCode - Web開発まとめ

そんな感じで。

コメント

タイトルとURLをコピーしました