如何在URL变量名称和值之间切换

时间:2013-06-07 15:52:56

标签: php html url

例如,我有一个像这样的网址:

index.php?country=Canada

如果仅index.php表示默认国家/地区为美国。人们可以通过选中或取消选中复选框来在国家/地区之间切换。 但是人们可以通过GET变量对结果进行排序:

<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=state">State</a>
<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=surname">Surname</a>
<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=name">Name</a>

但是如果我使用$_SERVER["REQUEST_URI"],那么它将始终只是不断向我的URL数组添加新值(查询字符串)。 如果只是index.php,那就可以了,那么我可以这样做:

<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=state">State</a>
<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=surname">Surname</a>
<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=name">Name</a>

我知道在index.php之后,它将始终是问号?。 但是,当访问者希望保留index.php?country=Canada并在sort=state, sort=surname and sort=name之间切换时,该怎么办?然后我需要知道URL中是否已有问号,何时添加&标记。我不知道如何解决这个问题。

4 个答案:

答案 0 :(得分:2)

更改回复链接的方式:

PHP

<?php
    $link = $_SERVER["PHP_SELF"];
    if(isset($_GET['country']
        $link.="&";
    else
        $link.="?";
?>

和这样的回声链接:

HTML

<a href="<?php $link ?>sort=state">State</a>

注意:我在“排序”之前删除了问号。

答案 1 :(得分:1)

您需要逻辑来动态构建查询字符串,而不是静态添加?&

http_build_query之类的东西就是我要去的路线,但是你提供的信息与你想要的可能性相比很小,所以很难提供特定的代码。

Here is some more information about the http_build_query function in PHP。它的目的是建立一个查询字符串,这是你可能做的一个例子:

// capture the values into variables, however you want ($_GET is example)
$country = $_GET['country'];
$state = $_GET['state'];
$city = $_GET['city'];
$data = array();

// use logic to dynamically build the array, so long as the variables have values
!empty($country) ? array_push($data,'country'=>$country) : '';
!empty($state) ? array_push($data,'state'=>$state) : '';
!empty($city) ? array_push($data,'city'=>$city) : '';

// apply the array dynamically built
$querystring = http_build_query($data);

// concatenate to form the new URL
$url = 'http://www.example.com/?'.$querystring

如果您宣布countryUSAcitySeattle,但未声明state,则会产生:

http://www.example.com/?country=USA&city=Seattle

这些行中的某些内容应该只使用您要查找的值来构建所需的动态数组。

答案 2 :(得分:1)

查询字符串中的所有变量都存储在$_GET php超全局数组中。在您的示例中,您可以使用$_GET['country']访问该国家/地区。默认为美国,您可以使用isset()检查变量是否存在。

$country = "USA";
if(isset($_GET['country'])) {
   $country = $_GET['country'];
}

答案 3 :(得分:1)

这里的解决方案是使用$_GET(在另一个答案中已经提到)或http://php.net/manual/en/function.parse-url.php,这使得参数的排序完全无关紧要。只需将url解析为一组查询参数,然后测试你需要的那些参数。要将其全部转回网址,您可以使用http://php.net/manual/en/function.http-build-query.php