問題
解決策
現在のURLを最後のスラッシュ以降を省いて取得
現在のURLを最後のスラッシュ以降を省いて取得する方法をご紹介します。
現在のURLの取得
まず、現在のURLの取得方法です。
現在のURLを取得するには、「$_SERVER」関数を使用します。
$_SERVER["HTTP_HOST"] // ホスト名(ドメイン)【例:keylopment.com】 $_SERVER["REQUEST_URI"] // ドメイン以下のパス【/faq/】 $_SERVER["HTTPS"] // SSLが有効(https://)ならば「on」を、そうでないなら「NULL」を返す
上記を組み合わせます。
$nowurl = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
- 「empty()」で空(または存在しない)か否かを判定し、「http://」か「https://」かを振り分けています。
→ 過去の記事で「empty()」について触れていますので、ぜひご覧ください。
PHPで変数に値が入っているかどうかを判定する
現在のURLから最後の/(スラッシュ)以降を取得
現在のURLから最後の/(スラッシュ)以降を取得するために、「preg_match」を使用します。
preg_match("検索パターン", "検索対象の文字列", $matches(検索結果の配列));
「preg_match」を用いて、最後のスラッシュ以降を現在のURLから取得します。
preg_match("/[^\/]+$/", $nowurl, $matches);
- 正規表現を用いた「/[^\/]+$/」で、最後のスラッシュ以降を取得できます。
最後に、現在のURLから、最後の/(スラッシュ)以降($matches)を省く
ある文字列の中での特定の文字列を検索して割り出し、別の文字列に置き換えるには、「str_replace」を使用します。
str_replace("検索する文字列", "置き換え後の文字列", "置き換えを行う文字列");
「str_replace」を用いて、先ほど取得した最後のスラッシュ以降を取り払います。
$nowurl = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
preg_match("/[^\/]+$/", $nowurl, $matches);
$strurl = str_replace( $matches[0], '', $nowurl );
- 検索結果の配列「$matches」には、最後のスラッシュ以降の文字列が格納されています。
- 「str_replace」で、 「$matches」の配列内の最初の値「$matches[0]」の文字列を検索し、該当する部分を「’’」で空の文字列に置き換えることで取り払います。
参考ページ
【PHP($_SERVER)サーバー変数一覧と実用例】
https://www.flatflag.nir87.com/server-358
【PHPでHTTPS(SSL)接続じゃなかったらHTTPSのURLにリダイレクトする – アインシュタインの電話番号】
http://blog.ruedap.com/2011/06/08/php-http-https-ssl-url-redirect
【PHP: preg_match – Manual 】
https://www.php.net/manual/ja/function.preg-match.php#refsect1-function.preg-match-parameters
【PHPの正規表現 初心者向け基本~ 早見表掲載! | WEPICKS!】
https://wepicks.net/phpref-regular_expression/
【PHP – スラッシュ以降の文字列を取得する方法|teratail】
https://teratail.com/questions/127449
コメント