【问题标题】:Check if url contains parameters [duplicate]检查url是否包含参数[重复]
【发布时间】:2012-06-03 08:09:36
【问题描述】:

可能重复:
keeping url parameters during pagination

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

例子:

foobar.com/foo/bar/index.php => foobar.com/foo/bar/index.php?myparameter=5 foob​​ar.com/index.php?foo=7 => foobar.com/index.php?foo=7&myparameter=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"; 
}?>

【问题讨论】:

  • @Puyol,您不应该使用常量作为数组键,而是用大括号括起来或从字符串中断开并连接。 "http://{$_SERVER['HTTP_HOST']}..."

标签: php url


【解决方案1】:

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

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
}

【讨论】:

  • 我不想知道我的参数是否设置,我想知道是否设置了任何参数
  • 其实还是可以有这样的url:example.com?所以这样没有参数但他仍然不应该添加?字符
  • count($_GET) ? '&amp;' : '?'
  • 我在您的更新中添加empty,如下所示; if(empty(count($_GET))){ 当没有参数时 :p :)
  • 那些被 mod 重写的 URL 怎么办? count($_GET) 总是会为它们设置?
【解决方案2】:

你真的应该使用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”等

【讨论】:

  • 通过使用 PHP_URL_PATH 作为 parse_url 的第二个参数,它不会传递 $url['query'],因此您的 isset($url['query']) 将始终为 false。只需删除 PHP_URL_PATH 作为第二个参数即可正常工作。感谢您的回答,因为当 $_GET 不可用时,这对我来说更有意义。
  • @Chris 是的,你的权利,谢谢
【解决方案3】:

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

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"; 
}

【讨论】:

  • 或者简而言之,&lt;?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]".((strpos($_SERVER['REQUEST_URI'],'?'))?'&amp;':'?')."myparameter=5"。谢谢你最酷的把戏。
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2014-10-23
相关资源
最近更新 更多