【问题标题】:Echo alternative $_GET request methodecho 替代 $_GET 请求方法
【发布时间】:2012-04-18 17:12:54
【问题描述】:

我知道这种方法:

stackoverflow.com/?id=stack

<?php 
   echo $_GET['id'];
   //output: stack
?>

但我想知道如果 url 是这样的,如何获取 $_GET 请求:

stackoverflow.com/?stack

<?php 
   echo ???
   //output: stack
?>

注意/?之后的内容是动态变化的。

【问题讨论】:

  • 你应该看看 mod_rewrite,URL 重写。

标签: php get


【解决方案1】:

您可以使用$_SERVER['QUERY_STRING'] 获取整个查询字符串(未解析)

【讨论】:

    【解决方案2】:

    您可以像这样检索 $_GET 的所有值:

    <?php
    foreach($_GET as $key => $value){
     // $key = 'stack';
     // $value = '';
    }
    

    但是,您应该知道您的应用程序中可能有哪些值并为它们适当地编码。

    【讨论】:

    • @phihag,从print_r($_GET) 输出.?stack = Array ( [stack] =&gt; )
    • 是的,对不起,搞砸了测试。
    【解决方案3】:

    你可以使用$_SERVER来获取很多关于URL的信息,比如

    $_SERVER['QUERY_STRING'];
    $_SERVER['REQUEST_URI'];
    

    【讨论】:

      【解决方案4】:

      $_SERVER['QUERY_STRING'] 包含您要查找的值。试试:

      <?php
      echo $_SERVER['QUERY_STRING'];
      

      【讨论】:

        【解决方案5】:

        您可以浏览$_GET 的内容,看看里面有什么。在您的情况下,stack 将是带有空字符串作为值的键。

        此外,您可以使用parse_url 并从结果中检查query 键,这与其他答案中描述的使用$_SERVER['QUERY_STRING'] 相同。

        但是,如果您描述了您要达到的目标,也许会有所帮助。

        【讨论】:

          【解决方案6】:
          <?php
          $d = array_keys($_GET);
          echo array_shift($d);
          ?>
          

          【讨论】:

            【解决方案7】:
            <?php
            $key = 'stack';
            echo array_key_exists( $key, $_GET ) ? $key : NULL;
            ?>
            

            我刚刚注意到你的评论:

            注意 /? 之后的内容是动态变化的。

            如果您只想对查询字符串中出现的任何内容进行动态处理,那么有关循环 $_GET 或访问 $_SERVER[ 'QUERY_STRING' ] 的其他答案可能更适合您(实际上取决于您在做什么)。这种情况的另一种可能性是array_keys( $_GET )

            【讨论】:

            • $_GET 对于请求 ?stack 为空。另外,为什么你会默认使用NULL 而不是''
            • 对于该请求,$_GET 不会为空 - 它将使用带有键 stack 和空字符串值的元素填充。 “另外,你为什么要默认为NULL而不是''”——在这种情况下并不特别重要。 NULL 将被转换为字符串,在这种情况下为空字符串。
            • 哎呀,你完全正确。我一定是搞砸了考试。尽管如此,此变体不适用于key = 'x&amp;y';
            • 我不确定你的意思。对于/?x&amp;y$_GET 将填充 2 个元素,键为 xy 以及空字符串值。如果您想要 x&amp;y 的键,则必须对 URL 中的 & 符号进行百分比编码(假设&符号是参数分隔符,这不是给定的)。
            • 有些场景你不想让 php 解析你的查询字符串。例如,您可能希望允许多个(相同的)键,或收集整个查询字符串以将其包含在管理面板中。
            【解决方案8】:

            它将是具有空值的 $_GET['stack']。

            有一个超全局 $_GET 数组。我相信在 php.net 上查看会有所帮助。

            http://localhost/?stack

            代码:

            <?php
            echo var_dump($_GET);
            

            输出:

            array(1) {
              ["stack"]=>
              string(0) ""
            }
            

            【讨论】:

              猜你喜欢
              • 2023-04-05
              • 1970-01-01
              • 2012-10-01
              • 1970-01-01
              • 2016-08-23
              • 2019-11-01
              • 1970-01-01
              • 2011-12-29
              • 1970-01-01
              相关资源
              最近更新 更多