页面: /index.php?page=6&test=1&test2=2
以下代码 page = 6 下面的代码,因此我可以将新页面添加到网址并再次将$ url_without_page_var添加回我们的链接:
$_SERVER['argv'][0]
// Displays: page=6&test=1&test2=2
和
$url_without_page_var=preg_replace('/page=(\d+)/i','',$_SERVER['argv'][0]);
// Displays: &test=1&test2=2
好的,以便代码让我从 page = 6& test = 1& test2 = 2 中取出 page = 6 然后我可以更改页码并将它们全部重新组合在一起。
我的问题往往是网址中的网页并不总是处于同一位置,可能不是第1个或最后一个项目 这就是当发生URL现在不正确时会发生的事情;
/page.php?& ** test = 1& test2 = 2 ** ERROR-HERE-ALSO page = 9
答案 0 :(得分:5)
$_GET
变量提供通过URL设置的所有变量的数组。 $_REQUEST
是所有GET
和POST
变量集的数组。这是鱼:
$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;
}
}
正则表达式对这个问题有点矫枉过正。 希望它有意义。过去几周我一直在编写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 = "&";
}
}
答案 1 :(得分:4)
为什么你不能重建网址?
$query = $_GET;
unset($query['page']);
$length = ($length = strpos($_SERVER['REQUEST_URI'], '?')) ? $length : strlen($_SERVER['REQUEST_URI']);
$url = substr($_SERVER['REQUEST_URI'], 0, $length) . '?' . http_build_query($query);
http_build_query()确实需要PHP5,但您可以轻松地重写该功能。
编辑:添加$ length变量来修复代码。
答案 2 :(得分:2)
修改你的正则表达式以寻找一个可选的尾随&符号并删除它。然后,当您将URL重新放在一起时,请在必要时添加一个&符号。
$url_without_page_var=preg_replace('/page=(\d+)\&?/i','',$_SERVER['argv'][0]);
$new_url = $url_without_page_var . '&page=9';
答案 3 :(得分:1)
您可能需要查看parse_str
,从查询字符串中提取信息并将其作为数组获取
然后你可以
unset
从数组中删除page
条目
例如:
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][3]; // baz
而且,为了取回剩下的部分,http_build_query
可能有用; - )
作为一个例子:
$str = 'page=6&test=1&test2=2';
parse_str($str, $data);
var_dump($data);
$data['page'] = 10;
$new_str = http_build_query($data);
var_dump($new_str);
第一个var_dump
为您提供:
array
'page' => string '6' (length=1)
'test' => string '1' (length=1)
'test2' => string '2' (length=1)
=&GT;你知道页码。
第二个为您提供了一个很好的查询字符串:
string 'page=10&test=1&test2=2' (length=22)
您需要的是: - )
答案 4 :(得分:1)
$url = 'index.php';
if (isset($_GET['page'])) unset($_GET['page']);
if (count($_GET) > 0) $url .= "?".implode("&", $_GET);
答案 5 :(得分:0)
您只需在网址末尾添加新的网页编号,而无需使用旧网页编号。之前的一个将自动替换为新的。
如果您有网址
page.php?page=1&var1=foo&var2=bar&page=100
并且您在PHP中检查了$_GET
数组,您会发现$_GET['page']
的值为100
如果您想要替换该值,可以使用此正则表达式,而不是删除页码并稍后添加它,您可以在一个preg_replace
preg_replace('/(page=)\d+/i', '\1' . $newNumber, $_SERVER['argv'][0]);
无论在哪个位置页面上,这都会有效。