6

URLからパラメータを削除したい:

$linkExample1='https://stackoverflow.com/?name=alaa&counter=1';
$linkExample2='https://stackoverflow.com/?counter=4&star=5';

私はこの結果を得ようとしています:

を使ってやろうとしていますpreg_replaceが、どうすればいいのかわかりません。

4

8 に答える 8

8
$link = preg_replace('~(\?|&)counter=[^&]*~','$1',$link);
于 2012-06-11T18:20:24.413 に答える
3

正規表現に依存すると、物事が台無しになることがあります。

parse_url()URL全体を分割し、それを連想配列として表示する関数を使用する必要があります。

その配列を取得したら、必要に応じて編集し、パラメーターを削除できます。

完了したら、http_build_url()関数を使用して、変更を加えたURLを再構築します。

こちらのドキュメントを確認してください。

Parse_Url Http_build_query()

編集

おっと、言及するのを忘れました。パラメータ文字列を取得したら、明らかにパラメータを個別のパラメータとして分離する必要があります。このために、文字列をparse_str()関数への入力として提供できます。

これを行うには、&をデリメータとしてexplode ()を使用することもできます。

于 2012-06-11T18:24:25.117 に答える
1

parse_url()http_build_query()の組み合わせを使用することをお勧めします。

于 2012-06-11T18:24:16.450 に答える
1

リクエストされたURLを取得し、「name」というパラメータを削除してから、ページをリロードするコード例:

$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; //complete url
$parts = parse_url($url);
parse_str($parts['query'], $query); //grab the query part
unset($query['name']); //remove a parameter from query
$dest_query = http_build_query($query); //rebuild new query
$dest_url=(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http").'://'.$parts['path'].'?'.$dest_query; //add query to host
header("Location: ".$dest_url); //reload page
于 2017-03-10T13:06:59.747 に答える
1

正しく取り扱ってください!!

remove_query('http://example.com/?a=valueWith**&**inside&b=value');

コード:

function remove_query($url, $which_argument=false){ 
    return preg_replace( '/'. ($which_argument ? '(\&|)'.$which_argument.'(\=(.*?)((?=&(?!amp\;))|$)|(.*?)\b)' : '(\?.*)').'/i' , '', $url);  
}
于 2017-11-29T11:12:24.150 に答える
0

parse_url()parse_str()バグがあります。正規表現は機能しますが、壊れてしまう傾向があります。正しく分解し、変更を加えてからURLを再構築する場合は、以下を確認する必要があります。

http://barebonescms.com/documentation/ultimate_web_scraper_toolkit/

ExtractURL()のような出力を生成parse_url()しますが、はるかに多くのことを行います(そしてそれを正しく行います)。 CondenseURL()から配列をExtractURL()取得し、情報から新しいURLを作成します。どちらの関数も「support/http.php」ファイルにあります。

于 2012-06-11T18:52:20.040 に答える
0

数年後... $_ GETは、PHPの他の配列と同じように操作できます。キーの設定を解除し、 http_build_query関数を使用してhttpクエリを作成するだけです。

// Populate _GET with sample data...
$_GET = array(
    'value_a' => "A",
    'key_to_remove' => "Don't delete me bro!",
    'value_b' => "B"
);
// Should output everything...
// "value_a=A&key_to_remove=Don%27t+delete+me+bro%21&value_b=B"
echo "\n".http_build_query( $_GET );

// Remove the key from _GET...
unset( $_GET[ 'key_to_remove' ] );
// Should output everything else...
// "value_a=A&value_b=B"
echo "\n".http_build_query( $_GET );
于 2017-08-02T19:10:13.500 に答える
0

これは私のために働いています:

function removeParameterFromUrl($url, $key)
{
    $parsed = parse_url($url);
    $path = $parsed['path'];
    unset($_GET[$key]);
    if(!empty(http_build_query($_GET))){
      return $path .'?'. http_build_query($_GET);
    } else return $path;
}
于 2017-11-16T02:02:07.853 に答える