0

を使用$_SERVER['REQUEST_URI']すると、次のような URL を取得できます。

index.php 

また

index.php?id=x&etc..

私は2つのことをしたいと思います:

  1. 名前の後に?somethingindex.phpがあるかどうかを正規表現で検索します。

  2. URL に特定の変数 ( id=x ) がある場合は、URL から削除します。

例えば:

index.php?id=x       => index.php 
index.php?a=11&id=x  => index.php?a=11

これどうやってするの?

4

2 に答える 2

2

?somethingafterがあるかどうかを確認するには、次のよう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

デモ!

于 2013-10-04T12:47:56.417 に答える
1

正規表現でなければならない場合:

$url='index.php?a=11&id=1234';
$pattern = '#\id=\d+#';
$url = preg_replace($pattern, '', $url);

echo $url;

出力

index.php?a=11&

末尾&に がありますが、上記は id=xxxxxxxx を削除します

于 2013-10-04T12:52:14.967 に答える