PHP:更改URL参数
PHP: Change URL parameter
这就是我的
echo '<button><a href="'.$_SERVER['REQUEST_URI'].'&startrow='.($startrow+100).'">Next 100</a></button>';
我的 url 中有 2 个参数,一个是 campaign,第二个是 startrow,我怎样才能从 url 中删除 'startrow' 参数及其值。我想要这样的东西。
echo '<button><a href="'.REMOVE &startrow=x($_SERVER['REQUEST_URI']).'&startrow='.($startrow+100).'">Next 100</a></button>';
当我按下下一个 100 按钮时,页面重新加载并在 url 中添加 startrow 参数因此,如果我按下下一个 100 按钮 5 次,我在 url 中有 5 个 startrow 参数, 所以我想先删除之前的 startrow 参数然后添加新的
我的实际url:查询表。php/campaign=all&startrow=100
当我点击 Next 100 按钮时: 查询表。php/campaign=all&startrow=100&startrow=200
我要的:查询表.php/campaign=all&startrow=200
以这种方式构建 URL 并不干净,与其删除一些参数,不如从干净的路径开始,然后添加所需的参数。
你可以这样做:
echo '<button><a href="'.$_SERVER['PHP_SELF'].'&startrow='.($startrow+100).'">Next 100</a></button>';
如果你真的想用 $_SERVER['REQUEST_URI']
来做,这应该可行:
function getUrl($startRow) {
$url = preg_replace('@&startnow=[\d]+@', '', $_SERVER['REQUEST_URI']);
return $url.'&startrow='.$startRow;
}
// ...
echo '<button><a href="'.getUrl($startrow+100).'">Next 100</a></button>';
可能比较长,但方法准确。这里我们使用 parse_url and parse_str 来实现所需的输出。
<?php
$url="http://www.example.com/some/path?startrow=100&campaign=abc";
echo change_url_parameter($url, "startrow", 200);
function change_url_parameter($url,$parameterName,$parameterValue) {
$url=parse_url($url);
parse_str($url["query"],$parameters);
unset($parameters[$parameterName]);
$parameters[$parameterName]=$parameterValue;
return sprintf("%s://%s%s?%s",
$url["scheme"],
$url["host"],
$url["path"],
http_build_query($parameters));
}
Sahil 答案更新,因此函数可以使用带点的参数并保留 url 片段。 PHP7.4.
"url": "https://www.zzz.ccc/?zzz.er=ty&aa.dd=vv#123",
"param_to_change": "zzz.er",
"old_behave": "https://www.zzz.ccc/?zzz_er=ty&aa_dd=vv&zzz.er=4444",
"new_behave": "https://www.zzz.ccc/?zzz.er=4444&aa.dd=vv#123"
public function change_1_url_param($url,$parameter,$parameterValue)
{
$url_init = $url;
$url=parse_url($url);
parse_str($url["query"],$parameters);
unset($parameters[$parameter]);
$parameters[$parameter]=$parameterValue;
$url_fragment = '';
if(isset($url['fragment']))
$url_fragment = '#'.$url['fragment'];
if(mb_stripos($parameter,'.')!==false){
$url_q = $url["query"];
$explode_0 = explode($parameter.'=',$url_q);
if(!isset($explode_0[1]))
return $url_init;
$explode_1 = explode('&',$explode_0[1]);
$u = str_replace( $explode_1[0] , $parameterValue , $url_q );
$u = $url["scheme"].'://'.$url["host"].$url["path"]."?".$u.$url_fragment;
}
else
$u = $url["scheme"].'://'.$url["host"].$url["path"]."?".http_build_query($parameters).$url_fragment;
return $u;
}
这就是我的
echo '<button><a href="'.$_SERVER['REQUEST_URI'].'&startrow='.($startrow+100).'">Next 100</a></button>';
我的 url 中有 2 个参数,一个是 campaign,第二个是 startrow,我怎样才能从 url 中删除 'startrow' 参数及其值。我想要这样的东西。
echo '<button><a href="'.REMOVE &startrow=x($_SERVER['REQUEST_URI']).'&startrow='.($startrow+100).'">Next 100</a></button>';
当我按下下一个 100 按钮时,页面重新加载并在 url 中添加 startrow 参数因此,如果我按下下一个 100 按钮 5 次,我在 url 中有 5 个 startrow 参数, 所以我想先删除之前的 startrow 参数然后添加新的
我的实际url:查询表。php/campaign=all&startrow=100
当我点击 Next 100 按钮时: 查询表。php/campaign=all&startrow=100&startrow=200
我要的:查询表.php/campaign=all&startrow=200
以这种方式构建 URL 并不干净,与其删除一些参数,不如从干净的路径开始,然后添加所需的参数。
你可以这样做:
echo '<button><a href="'.$_SERVER['PHP_SELF'].'&startrow='.($startrow+100).'">Next 100</a></button>';
如果你真的想用 $_SERVER['REQUEST_URI']
来做,这应该可行:
function getUrl($startRow) {
$url = preg_replace('@&startnow=[\d]+@', '', $_SERVER['REQUEST_URI']);
return $url.'&startrow='.$startRow;
}
// ...
echo '<button><a href="'.getUrl($startrow+100).'">Next 100</a></button>';
可能比较长,但方法准确。这里我们使用 parse_url and parse_str 来实现所需的输出。
<?php
$url="http://www.example.com/some/path?startrow=100&campaign=abc";
echo change_url_parameter($url, "startrow", 200);
function change_url_parameter($url,$parameterName,$parameterValue) {
$url=parse_url($url);
parse_str($url["query"],$parameters);
unset($parameters[$parameterName]);
$parameters[$parameterName]=$parameterValue;
return sprintf("%s://%s%s?%s",
$url["scheme"],
$url["host"],
$url["path"],
http_build_query($parameters));
}
Sahil 答案更新,因此函数可以使用带点的参数并保留 url 片段。 PHP7.4.
"url": "https://www.zzz.ccc/?zzz.er=ty&aa.dd=vv#123",
"param_to_change": "zzz.er",
"old_behave": "https://www.zzz.ccc/?zzz_er=ty&aa_dd=vv&zzz.er=4444",
"new_behave": "https://www.zzz.ccc/?zzz.er=4444&aa.dd=vv#123"
public function change_1_url_param($url,$parameter,$parameterValue)
{
$url_init = $url;
$url=parse_url($url);
parse_str($url["query"],$parameters);
unset($parameters[$parameter]);
$parameters[$parameter]=$parameterValue;
$url_fragment = '';
if(isset($url['fragment']))
$url_fragment = '#'.$url['fragment'];
if(mb_stripos($parameter,'.')!==false){
$url_q = $url["query"];
$explode_0 = explode($parameter.'=',$url_q);
if(!isset($explode_0[1]))
return $url_init;
$explode_1 = explode('&',$explode_0[1]);
$u = str_replace( $explode_1[0] , $parameterValue , $url_q );
$u = $url["scheme"].'://'.$url["host"].$url["path"]."?".$u.$url_fragment;
}
else
$u = $url["scheme"].'://'.$url["host"].$url["path"]."?".http_build_query($parameters).$url_fragment;
return $u;
}