正则表达式能解决这个问题吗?

Jas*_*vis 2 php regex

页面:/index.php? page = 6&test = 1&test2 = 2

下面条的代码页= 6的关闭此这样我就可以添加我们的新页面的URL,然后再添加$ url_without_page_var回到我们的链接:

$_SERVER['argv'][0]
// Displays:   page=6&test=1&test2=2
Run Code Online (Sandbox Code Playgroud)

 $url_without_page_var=preg_replace('/page=(\d+)/i','',$_SERVER['argv'][0]);
// Displays: &test=1&test2=2
Run Code Online (Sandbox Code Playgroud)

好了,这样的代码让我把页面= 6关闭的页面= 6&测试= 1&测试2 = 2 然后我就可以改变页数,并添加这一切重新走到一起.

我的问题通常是URL中的页面并不总是处于相同的位置,它可能不是第一个或最后一个项目这是将发生的情况,现在看看URL是如何不正确的;

/page.php?&**test = 1&test2 = 2**ERROR-HERE-ALSO page = 9

有可能解决这个问题吗?

Mik*_*yer 5

$_GET变量提供了通过URL设置的所有变量的数组.$_REQUEST是所有GETPOST变量集的数组.这是鱼:

$url_string = "index.php?";
foreach( $_GET as $k => $v ){
    if( $k != "key_you_dont_want"){ // <-- the key you don't want, ie "page"
        if( $url_string != "index.php?" )
            $url_string .= "&"; // Prepend ampersands nicely
        $url_string .= $k . "=" . $v;
    }
}
Run Code Online (Sandbox Code Playgroud)

正则表达式对这个问题有点矫枉过正.希望它有意义.过去几周我一直在编写Python和Javascript.PHP感觉就像倒退了一步.

编辑:这段代码让我更开心.我实际测试过它而不是盲目地打字和交叉手指.

unset( $_GET["page"] );

$c = count($_GET);
$amp = "";
$url_string = "test.php";

if( $c > 0 ) {
    $url_string .= "?";
    foreach( $_GET as $k => $v ){
        $url_string .= $amp . $k . "=" . $v;
        $amp = "&";
    }
}
Run Code Online (Sandbox Code Playgroud)