15

可能重复:
在分页期间保留 url 参数

我想用php给当前url添加一个参数,但是我怎么知道url是否已经包含参数呢?

例子:

foob​​ar.com/foo/bar/index.php => foobar.com/foo/bar/index.php?myparameter=5 foobar.com/index.php?foo=7 => foobar.com/index.php?foo =7&我的参数=5

主要问题是我不知道是否需要添加“?”。

我的代码(在某处找到,但它不起作用):

<?php   if(/?/.test(self.location.href)){ //if url contains ?
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}?>
4

3 回答 3

37

URL 参数是从一个名为的全局变量接收的,该变量$_GET实际上是一个数组。因此,要知道 URL 是否包含参数,可以使用isset()function.

if (isset($_GET['yourparametername'])) {
    //The parameter you need is present
}

之后,您可以创建需要附加到 URL 的此类参数的单独数组。像:

if(isset($_GET['param1'])) {
    \\The parameter you need is present
    $attachList['param1'] = $_GET['param1'];
}
if(isset($_GET['param2'])) {
    $attachList['param2'] = $_GET['param2];
}

现在,要知道是否需要一个?符号,只需计算这个数组

if(count($attachList)) {
    $link .= "?";
    // and so on
}

更新:

要知道是否设置了任何参数,只需计算$_GET

if(count($_GET)) {
     //some parameters are set
}
于 2012-06-03T08:14:43.460 回答
19

你真的应该使用parse_url()函数:

<?php
$url = parse_url($_SERVER['REQUEST_URI']);

if(isset($url['query'])){
    //Has query params
}else{
    //Has no query params
}
?> 

此外,您应该将基于数组的变量括在大括号中或从字符串中分出:

$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}?myparameter=5";

或者

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?myparameter=5";

启用error_reporting(E_ALL);,您将看到错误。注意:使用未定义的常量 REQUEST_URI - 假定为“REQUEST_URI”等

于 2012-06-03T08:30:14.197 回答
7

您可以搜索“?” 像这样的字符:

if (strpos($_SERVER[REQUEST_URI], '?')) { // returns false if '?' isn't there
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}
于 2012-06-03T08:18:09.070 回答