URLからパラメータを削除したい:
$linkExample1='https://stackoverflow.com/?name=alaa&counter=1';
$linkExample2='https://stackoverflow.com/?counter=4&star=5';
私はこの結果を得ようとしています:
を使ってやろうとしていますpreg_replace
が、どうすればいいのかわかりません。
URLからパラメータを削除したい:
$linkExample1='https://stackoverflow.com/?name=alaa&counter=1';
$linkExample2='https://stackoverflow.com/?counter=4&star=5';
私はこの結果を得ようとしています:
を使ってやろうとしていますpreg_replace
が、どうすればいいのかわかりません。
$link = preg_replace('~(\?|&)counter=[^&]*~','$1',$link);
正規表現に依存すると、物事が台無しになることがあります。
parse_url()
URL全体を分割し、それを連想配列として表示する関数を使用する必要があります。
その配列を取得したら、必要に応じて編集し、パラメーターを削除できます。
完了したら、http_build_url()
関数を使用して、変更を加えたURLを再構築します。
こちらのドキュメントを確認してください。
編集
おっと、言及するのを忘れました。パラメータ文字列を取得したら、明らかにパラメータを個別のパラメータとして分離する必要があります。このために、文字列をparse_str()関数への入力として提供できます。
これを行うには、&をデリメータとしてexplode ()を使用することもできます。
parse_url()とhttp_build_query()の組み合わせを使用することをお勧めします。
リクエストされた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
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);
}
parse_url()
parse_str()
バグがあります。正規表現は機能しますが、壊れてしまう傾向があります。正しく分解し、変更を加えてからURLを再構築する場合は、以下を確認する必要があります。
http://barebonescms.com/documentation/ultimate_web_scraper_toolkit/
ExtractURL()
のような出力を生成parse_url()
しますが、はるかに多くのことを行います(そしてそれを正しく行います)。 CondenseURL()
から配列をExtractURL()
取得し、情報から新しいURLを作成します。どちらの関数も「support/http.php」ファイルにあります。
数年後... $_ 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 );
これは私のために働いています:
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;
}