0

そのため、配列で事前定義されている URL クエリ文字列から特定のパラメーターを削除しようとしています。これが私がこれまでに持っているものです:

<?php
// Construct the current page URL
$host     = $_SERVER['HTTP_HOST'];
$script   = $_SERVER['SCRIPT_NAME'];
$params   = $_SERVER['QUERY_STRING'];
$currentUrl = 'http://' . $host . $script . '?' . $params;

// Store all URL parameters into an array (HOST, PATH, QUERY, etc)
$url_params = array();
$url_params = parse_url($currentUrl);

// Create an array to store just the query string, breaking them apart
$params_array = explode('&', $url_params['query']);

// Array holding URL parameters that we want to remove
$params_to_remove = array("param1", "param2", "param3", "param4", "param5");


$location = 0;
// Loop through and remove parameters found in PARAMS_TO_REMOVE array
for($x = 0; $x < count($params_to_remove); $x++) {
    if(in_array($params_to_remove[$x], $params_array)) {
        $location = array_search($params_to_remove[$x], $params_array);
        unset($params_array[$location]);
    }
}

// Print array after unwanted parameters were removed
print_r($params_array);
echo '<br /><br />';

// Construct a new array holding only the parameters that we want
$clean_params_array = array();
for($z = 0; $z < count($params_array); $z++) {
    if($params_array[$z] != '') array_push($clean_params_array, $params_array[$z]);
}

// Print clean array
print_r($clean_params_array);
echo '<br />';

// Construct the new URL
// If there are paramters remaining in URL reconstruct them
if(count($clean_params_array) > 0) {
    $final_url = 'http://www.example.com' . $url_params['path'] . '?';
    for($y = 0; $y < count($clean_params_array); $y++) {
        $final_url .= $clean_params_array[$y] . '&';
    }
    // Trim off the final ampersand
    $final_url = substr($final_url, 0, -1);
}
// No parameters in final URL
else $final_url = 'http://www.example.com' . $url_params['path'];

// Print final URL
echo '<br />' . $final_url;
?>

出力は次のとおりです。

http://www.example.com/test.php?apple&banana&orange¶m1&strawberry¶m2&pineappleを使用

Array ( [0] => apple [1] => banana [2] => orange [4] => strawberry [6] => pineapple ) 

Array ( [0] => apple [1] => banana [2] => orange [3] => strawberry ) 

http://www.example.com/test.php?apple&banana&orange&strawberry

ご覧のとおり、最後のパラメーターが失われています。また、冗長すぎるようにも感じます...どこが間違っているのでしょうか?

4

3 に答える 3

3
$new_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."?".implode("&",array_diff(explode("&",$_SERVER['QUERY_STRING']),Array("param1","param2","param3","param4","param5")));

一発ギャグ ;)

そこからそれを取り出して、事前に変数として定義したほうがよいかもしれませんがArray(...)、読みやすくなっています。

于 2012-04-24T20:16:16.420 に答える
2
<?php 
 /** 
  * generateURL() 
  * 
  * Sprava URL adresy 
  * 
  * @author   stenley <stenley@webdev.sk> 
  * @version   1.4 
  */ 

 function generateURL() { 
    $GET = $_GET; 
    $QUERY_STRING = ''; 
    $SCRIPT_NAME = substr(strrchr($_SERVER["SCRIPT_NAME"],"/"),1); 

    $num_args = func_num_args(); 
    if($num_args>0 && $num_args%2==0) { 
       $args = func_get_args(); 

       foreach($args as $index => $paramName) { 
          $paramName = trim($paramName); 

          if($index%2==0 && !empty($paramName)) { 
             $paramValue = trim($args[$index+1]); 

             if(array_key_exists($paramName, $GET) && empty($paramValue)) { 
                unset($GET[$paramName]);    
             } elseif(!empty($paramValue)) { 
                $GET[$paramName] = $paramValue; 
             } 
          } 
       } 
    } 

    foreach($GET as $param => $value) { 
       $QUERY_STRING .= $param."=".$value."&amp;"; 
    } 

    return $SCRIPT_NAME.((empty($QUERY_STRING)) ? '' : "?".substr($QUERY_STRING,0,-5)); 
 } 
 ?>

URLアドレス管理に便利な機能です。使い方は簡単。スロバキア語の例をいくつか示します。しかし、コード サンプルは理解できると思います。または私はあなたのためにそれを翻訳します

私の英語でごめんなさい

于 2012-04-24T20:21:47.323 に答える
1

答えの一部は次の行にあります: 配列 ( [0] => リンゴ [1] => バナナ [2] => オレンジ [4] => イチゴ [6] => パイナップル)

$params_array[5] が存在しないことに注意してください。それでも、$z==5 のときに $params_array[5] を読み取ろうとします (while ループでは、値 $z = 0; => $z < 6; (count($params_array)) を通過します)

Kolink のソリューションを使用するか、foreachループを使用してすべての値を調べることができます。

foreach($params_array as $param) {
    if($param != '') array_push($clean_params_array, $param); 
}
于 2012-04-24T20:24:13.950 に答える