【问题标题】:GET URL parameter in PHP获取 PHP 中的 URL 参数
【发布时间】:2011-08-18 14:15:24
【问题描述】:

我正在尝试将 URL 作为 php 中的 url 参数传递,但是当我尝试获取此参数时,我什么也没得到 ​​p>

我正在使用以下网址形式:

http://localhost/dispatch.php?link=www.google.com

我正在努力解决:

$_GET['link'];

但没有返回。有什么问题?

【问题讨论】:

  • 显示您的完整代码
  • var_dump$_GET 参数,它应该在那里
  • $_REQUEST['link'] 有效吗?另请记住,索引键 link 对 url 中的内容区分大小写。
  • 您实际上并没有尝试$_GET,而是碰巧在发帖是吗?
  • 解决方案是什么?遇到同样的问题

标签: php url redirect


【解决方案1】:

$_GET 不是函数或语言结构——它只是一个变量(一个数组)。试试:

<?php
echo $_GET['link'];

特别是superglobal:一个由 PHP 填充的内置变量,可在所有范围内使用(您可以在没有global 关键字的函数内部使用它)。

由于变量可能不存在,您可以(并且应该)确保您的代码不会触发通知:

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

或者,如果您想跳过手动索引检查并可能添加进一步的验证,您可以使用 filter 扩展:

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

最后但同样重要的是,您可以使用null coalescing operator(自PHP/7.0 起可用)来处理丢失的参数:

echo $_GET['link'] ?? 'Fallback value';

【讨论】:

  • 如果您对此一无所知,就像我一样,您应该知道,“链接”是 URL 地址中的变量名称!所以用 $_GET['link'];您需要输入这样的 URL:localhost/?link=test
  • 我在 localhost 上使用 WAMP,但这个解决方案不起作用。 http://localhost/station?type=2 echo $_GET['type'];null
  • 最后我使用了parse_str(parse_url($actual_link)['query'], $params);。更多信息stackoverflow.com/a/11480852/4458531
  • 你说“$_GET 不是一个函数或语言结构——它只是一个变量(一个数组)”但我们不通过索引访问值,而是通过字符串访问值。这更像是一个字典而不是一个数组?
  • @ScottyBlades 我说的是 PHP 数据结构的上下文。在 PHP 中,array 是键/值组合的有序列表。这与其他语言(例如 C 或 JavaScript)所称的“数组”不同。
【解决方案2】:

请发布您的代码,

<?php
    echo $_GET['link'];
?>

<?php
    echo $_REQUEST['link'];
?>

工作...

【讨论】:

    【解决方案3】:

    使用这个:

    $parameter = $_SERVER['QUERY_STRING'];
    echo $parameter;
    

    或者直接使用:

    $parameter = $_GET['link'];
    echo $parameter ;
    

    【讨论】:

      【解决方案4】:

      为确保您始终处于安全状态,避免插入各种不需要的代码,请使用过滤器:

      echo filter_input(INPUT_GET,"link",FILTER_SANITIZE_STRING);
      

      更多阅读php.net function filter_input,或查看the description of the different filters

      【讨论】:

      • 请注意,此过滤器不能防御任何类型的攻击。但是,此过滤器将不可挽回地损坏您的数据。除非您确切知道自己在做什么,否则不要使用它。
      【解决方案5】:

      接受的答案很好。但是如果你有这样的场景:

      http://www.mydomain.me/index.php?state=California.php#Berkeley
      

      您可以将命名锚点视为查询字符串,如下所示:

      http://www.mydomain.me/index.php?state=California.php&city=Berkeley
      

      然后,像这样访问它:

      $Url = $_GET['state']."#".$_GET['city'];
      

      【讨论】:

        【解决方案6】:
        $Query_String  = explode("&", explode("?", $_SERVER['REQUEST_URI'])[1] );
        var_dump($Query_String)
        

        数组 ( [ 0] => 链接=www.google.com )

        【讨论】:

          【解决方案7】:

          我没有得到任何$_GET["..."](例如print_r($_GET) 给出了一个空数组)但$_SERVER['REQUEST_URI'] 显示的东西应该在那里。最后我发现我只是访问了网页,因为我的 .htaccess 将它重定向到那里(我的 404 处理程序是同一个 .php 文件,我在测试时在浏览器中打错了字)。

          简单地更改名称意味着一旦 404 重定向没有启动,相同的 php 代码就可以工作!

          所以有办法$_GET 可以不返回任何内容,即使 php 代码可能是正确的。

          【讨论】:

            【解决方案8】:

            正如 Alvaro 所说,$_GET 不是一个函数,而是一个包含参数的数组 因此,您可以使用

            从该数组中检索一个元素
            <?php
            $link = $_GET['link'];
            echo $link;
            ?>
            

            预期的操作:

            www.google.com
            

            【讨论】:

              【解决方案9】:

              这就是我解决问题的方法,我更进一步,使用该参数设置 cookie,然后重定向到干净的 URL。

              if (isset ($_GET['referrer'])) {
                  $referrer = $_GET['referrer'];
              
              //    check db if refer exists
                  $shareLinkTrue = (new queries)->checkNewReferralExists($conn, $referrer);
              //    if exists, set cookie
                  if ($shareLinkTrue == 1) {
                      setcookie('_referrer_link', $referrer, 1,
                          isset($params['path']),
                          isset($params['domain']),
                          isset($params['secure']),
                          isset($params['httponly']));
              
                      header('Location: register.php');
              
                  }
              
              }
              

              完美运行

              【讨论】:

                【解决方案10】:

                谁没有得到任何回报,我认为他只需将结果包含在 html 标签中,

                像这样:

                <html>
                <head></head>
                <body>
                <?php
                echo $_GET['link'];
                ?>
                <body>
                </html>
                

                【讨论】:

                • 不,不需要 html 标签。 所有浏览器都会呈现纯文本。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-11-05
                • 2019-01-20
                • 1970-01-01
                • 2013-06-27
                • 1970-01-01
                • 2017-09-30
                • 1970-01-01
                相关资源
                最近更新 更多