?something
afterがあるかどうかを確認するには、次のようindex.php
に組み込み関数を使用できます。parse_url()
if (parse_url($url, PHP_URL_QUERY)) {
// ?something exists
}
を削除するにはid
、 を使用parse_str()
し、クエリ パラメータを取得して配列に格納し、特定の を設定解除しid
ます。
また、特定の要素が URL のクエリ部分から削除された後に URL を再作成する必要があるため、http_build_query()
.
そのための関数は次のとおりです。
function removeQueryString($url, $toBeRemoved, $match)
{
// check if url has query part
if (parse_url($url, PHP_URL_QUERY)) {
// parse_url and store the values
$parts = parse_url($url);
$scriptname = $parts['path'];
$query_part = $parts['query'];
// parse the query parameters from the url and store it in $arr
$query = parse_str($query_part, $arr);
// if id == x, unset it
if (isset($arr[$toBeRemoved]) && $arr[$toBeRemoved] == $match) {
unset($arr[$toBeRemoved]);
// if there less than 1 query parameter, don't add '?'
if (count($arr) < 1) {
$query = $scriptname . http_build_query($arr);
} else {
$query = $scriptname . '?' . http_build_query($arr);
}
} else {
// no matches found, so return the url
return $url;
}
return $query;
} else {
return $url;
}
}
テストケース:
echo removeQueryString('index.php', 'id', 'x');
echo removeQueryString('index.php?a=11&id=x', 'id', 'x');
echo removeQueryString('index.php?a=11&id=x&qid=51', 'id', 'x');
echo removeQueryString('index.php?a=11&foo=bar&id=x', 'id', 'x');
出力:
index.php
index.php?a=11
index.php?a=11&qid=51
index.php?a=11&foo=bar
デモ!