如何实现添加/编辑参数机制?

时间:2017-06-06 09:51:57

标签: php url url-parameters

假设这是我当前的网址:

http://example.com/search?param1=foo&param2=bar

现在我要添加param3=baz。所以这是代码:

<a href="?param3=baz" >add param3</a>
//=> http://example.com/search?param3=baz

请参阅? param1param2将被删除。所以我必须像这样处理它:

<?php
    $query_str = parse_url($url, PHP_URL_QUERY);
    parse_str($query_str, $query_params);
    $query_params = $query_params == '' ? '?' : $query_params . '&';
?>

<a href="?{$query_params}param3=baz" >add param3</a>

看起来很难看,但是好的,没关系。现在如果参数已经存在并且我需要编辑它会发生什么?假设这个例子:

http://example.com/search?param1=foo&param2=bar

现在我如何创建一个编辑parame2值的链接? (加上保留其他参数)

2 个答案:

答案 0 :(得分:0)

在向其添加其他参数的同时,无法编写保留现有查询字符串的相对URI。

你必须再做一次:

search?param1=foo&param=bar&param3=baz

  

使用Javascript是可能的

How to add a parameter to the URL?

function currentUrl() {
    $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
    $host     = $_SERVER['HTTP_HOST'];
    $script   = $_SERVER['SCRIPT_NAME'];
    $params   = $_SERVER['QUERY_STRING'];

    return $protocol . '://' . $host . $script . '?' . $params;
}

然后用类似的东西添加你的值

echo currentUrl().'&param3=baz';

  

无论你有什么GET参数,我都会在那里,如果param3是一个   它之前的参数将被覆盖,否则将被包括在内   最后。

http_build_query(array_merge($_GET, array("param3"=>"baz")))

答案 1 :(得分:0)

您可以使用函数http_build_query生成新查询,如下所示:

$url = 'http://example.com/search?param1=foo&param2=bar';

$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $params);

$data = [
    'param3' => 'baz'
];

$params = array_merge($params, $data);

echo http_build_query($params) . "\n";

输出将是:

param1=foo&param2=bar&param3=baz

如果我们获取url:

,我使用array_merge来覆盖存在的参数
$url = 'http://example.com/search?param1=foo&param3=bar';

相同的代码输出将是:

param1=foo&param3=baz

我们覆盖存在的param并保存旧参数。