ここから本文です

PHP URLにクエリパラメータを付ける方法 URLに既にパラメータがある場合(?key=v...

egi********さん

2019/3/2023:46:49

PHP URLにクエリパラメータを付ける方法

URLに既にパラメータがある場合(?key=value)は & で連結して、
ない場合は ? で連結したいです。

クエリパラメータはhttp_build_queryで生成できますが、
URLに付与するときに ? なのか & なのかの判定ができません。

何か良い方法ありますか。

それっぽく実装しました。URL中の '?' はクエリパラメータの先頭にしか出現しないはずなので、単純にstrposを使うだけで問題なさそうですが、どうでしょうか。

$params = http_build_query($array);

if(strpos($url, '?')){
$new_url = $url . '&' . $params;
}else {
$new_url = $url . '?' . $params;
}

閲覧数:
23
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

nic********さん

2019/3/2102:43:31

いいんじゃね。
strpos()の結果は0になる事もあり得るので、普通はそのままifに使っちゃだめだけど、URL中に?が搭乗するときに先頭に来る、って事もないし。
URLを処理するときはparse_url()という便利な関数もあるが、この場合はその書き方で十分だろう。

質問した人からのコメント

2019/3/25 18:00:29

回答ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

shi********さん

2019/3/2114:23:16

基本的に提示されている方法で問題ないと思います。



>既にパラメータがある場合

すでにパラメータがある場合には、$_GETで受け取れているハズですなので

$params = http_build_query(array_merge($_GET, $arr));

として ? 以降の文字列を再生成する手もあります。この方法であれば新しいURL($new_url)が$urlと違うスクリプトでも適用できます。


逆に同じスクリプトの場合には(定義していないのであれば)$urlを

$url = $_SERVER['REQUEST_URI'];
if (($pos =strpos($_SERVER['REQUEST_URI'], '?')) !== false) {
$url = substr($url, 0 ,$pos);
}

のようにするか、$_SERVER['SCRIPT_NAME']から導出するかになります。

#それ以外の方法で$urlを出しているようだったら、
#その方法を書いていただけるとありがたいです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる