クエリ文字列をより確実に処理する方法は、実際にそれらを解析することです。
// If your original query string was just the data in $_GET, clone $_GET:
$new_query = $_GET;
// Otherwise, parse the original query string using parse_str:
parse_str($original_query_string, $new_query);
// Then, set the new cat value, and build a new query string.
$new_query['cat'] = 4;
$new_query_string = http_build_query($new_query);
あなたが元々記述技術は、正規表現の仕事です:)
$queryString2 = preg_replace('/cat=[0-9]+/', 'cat=4', $queryString);
一つ以上(+
)桁([0-9]
)に続く文字列cat=
にマッチする正規表現cat=[0-9]+
。 preg_replace
は、元の文字列(引数3)にある正規表現(引数1)のすべての一致を置換文字列(引数2)に置き換えて結果を返します。
dog_and_cat=1
をdog_and_cat=4
に置き換えることに注意してください。 borkweb's answerはより複雑な正規表現ですが、発生する可能性がある場合(例:これはユーザーが提供するクエリ文字列など)、そのエッジケースを処理します。
私は実際のクエリ解析を好みますが、正規表現ソリューションは理想的にはエッジケースがないと仮定しても理想的に動作するはずです。
Yup、正規表現。 – BoltClock