-1

パラメータ番号を持つ多くのリンクがあります- 値は 1 ~ 1000 の数字です

http://mysite.com?one=2&two=4&number=2
http://mysite.com?one=2&two=4&four=4&number=124
http://mysite.com?one=2&three=4&number=9
http://mysite.com?two=4&number=242
http://mysite.com?one=2&two=4&number=52

PHPでこのパラメータと値を削除するにはどうすればよいですか? 受け取りを希望します:

http://mysite.com?one=2&two=4
http://mysite.com?one=2&two=4&four=4
http://mysite.com?one=2&three=4
http://mysite.com?two=4
http://mysite.com?one=2&two=4
4

8 に答える 8

2

これを試して:

$str    = 'http://mysite.com?one=2&two=4&number=2';
$url    = parse_url($str);
parse_str($url['query'], $now );
unset($now['number']);
foreach($now as $key=>$value) :
    if(is_bool($value) ){
        $now[$key] = ($value) ? 'true' : 'false';
    }
endforeach;
$options_string=http_build_query($now);
echo $url    = 'http://mysite.com?'.$options_string;

参照 :配列からクエリ文字列を作成する PHP 関数 - http ビルド クエリではありません

于 2013-07-02T11:07:02.527 に答える
1

"&number=" が常に重要なパラメーターの後にある場合は、str_split (または爆発) を使用します。より確実な方法は、 を使用しparse_url()、 URLparse_str()http_build_query()分解して元に戻すことです。

于 2013-07-02T10:31:51.140 に答える
1

$_GET['one'] で新しい URL を構築した後にリダイレクトを構築できます

于 2013-07-02T10:31:51.627 に答える
1

文字列を変数に解析するparse_str()を使用できます。そうすれば簡単に分離できます

コードの例を書きました。

<?php
 $arr = array();
 $arr[] = 'http://mysite.com?one=2&two=4&number=2';
 $arr[] = 'http://mysite.com?one=2&two=4&four=4&number=124';
 $arr[] = 'http://mysite.com?one=2&three=4&number=9';
 $arr[] = 'http://mysite.com?two=4&number=242';
 $arr[] = 'http://mysite.com?one=2&two=4&number=52';

 function remove_invalid_arguments(array $array_invalid, $urlString)
 {
   $info = array();
   parse_str($urlString, $info);
   foreach($array_invalid as $inv)
  if(array_key_exists($inv,$info)) unset($info[$inv]);

   $ret = "";
   $i = 0;
   foreach($info as $k=>$v)
  $ret .= ($i++ ? "&" : ""). "$k=$v"; //maybe urlencode also :)

   return $ret;
 }

 //usage
 $invalid = array('number'); //array of forbidden params
 foreach($arr as $k=>&$v) $v =remove_invalid_arguments($invalid, $arr[1]);

 print_r($arr);

?>

ワーキングデモ

于 2013-07-02T10:32:14.070 に答える
1

このような

$urls = '
http://mysite.com?one=2&two=4&number=2
http://mysite.com?one=2&two=4&four=4&number=124
http://mysite.com?one=2&three=4&number=9
http://mysite.com?two=4&number=242
http://mysite.com?one=2&two=4&number=52
';

echo '<pre>';
echo preg_replace('#&number=\d+#', '', $urls);
于 2013-07-02T10:41:19.020 に答える
1

以下の手順を使用してください。これは明確なアプローチです

1- Parse the url into an array with parse_url()
2-  Extract the query portion, decompose that into an array
3- Delete the query parameters you want by unset() them from the array
4- Rebuild the original url using http_build_query()

これがあなたを助けることを願っています

于 2013-07-02T10:34:33.540 に答える