0

我们可以做些什么来删除page=2& 来自:

"page=2&param1=value1&param2=value2" or
"param1=value1&page=2&param2=value2".

变得:

"param1=value1&param2=value2" or
"param1=value1&param2=value2".

在 page=2 的情况下,2 是任何自然编号。即(0到32000)。

问候,

4

4 回答 4

10

您可以使用parse_str将字符串解析为数组,从数组中取消设置页面,然后使用http_build_query重建结果。

代码示例:

$str = 'page=2&param1=value1&param2=value2';
$arr = array();
parse_str($str, $arr);
unset($arr['page']);
echo http_build_query($arr);
于 2010-01-14T11:43:51.617 回答
1
 $str = trim(preg_replace("/\bpage=\d+&?/", "", $str), "$");

正则表达式:

\b        # Match a "boundary" point (start of new word)
page=     # Match 'page='
\d+       # Match 1 or more digits
&?        # Match a '&' if it exists

外部的修剪将去除&可能残留的任何尾随。

如果要修剪任何内容,可以将 替换为\d+[^&]+匹配 . 以外的任何字符&

 $str = trim(preg_replace("/\bpage=[^&]+&?/", "", $str), "$");
于 2010-01-14T11:42:43.727 回答
0

如果我理解正确,这将让您删除任意页面(只要您知道数字):

function replacePage($querystring, $page = 1) {
    return str_replace('page='.$page.'&', '', $querystring);
} 

附带说明一下,如果可以避免,使用正则表达式并不是最佳的编码方式。它们很慢,应该用其他方法代替,例如str_replace在可能的情况下进行标记化。如果我知道我必须从查询字符串中删除哪个页面,我个人会使用我的方法,因为它的运行速度比 preg_replace 快得多。

于 2010-01-14T11:38:38.450 回答
0

使用爆炸?

$urlString = "page=2&param1=value1&param2=value2";
$arr = explode('&',$urlString);
print_r( $arr );
foreach( $arr as $var => $val ) {
    if( substr( $val, 0, 6 ) == 'param2' ) {
        unset( $arr[ $var ] );
    }
}
$urlString = implode('&',$arr);
于 2010-01-14T11:44:10.597 回答