【问题标题】:Parsing GET request parameters in a URL that contains another URL解析包含另一个 URL 的 URL 中的 GET 请求参数
【发布时间】:2011-04-13 06:47:00
【问题描述】:

这是网址:

http://localhost/test.php?id=http://google.com/?var=234&key=234

而且我无法获得完整的 $_GET['id'] 或 $_REQUEST['d']。

<?php
print_r($_REQUEST['id']); 
//And this is the output http://google.com/?var=234
//the **&key=234** ain't show 
?>

【问题讨论】:

  • 尝试获取$_REQUEST['key']或将网址更改为http://localhost/test.php?id=http://google.com/?var=234&amp;amp;key=234
  • @teneff 如何在不指定“id”的情况下获取所有 $_GET?
  • 只需使用$_GET :) 就像print_r($_GET);

标签: php get request urlencode


【解决方案1】:
$get_url = "http://google.com/?var=234&key=234";
$my_url = "http://localhost/test.php?id=" . urlencode($get_url);

$my_url 输出:

http://localhost/test.php?id=http%3A%2F%2Fgoogle.com%2F%3Fvar%3D234%26key%3D234

所以现在您可以使用$_GET['id']$_REQUEST['id'](已解码)来获取此值。

echo urldecode($_GET["id"]);

输出

http://google.com/?var=234&key=234

获取每个 GET 参数:

foreach ($_GET as $key=>$value) {
  echo "$key = " . urldecode($value) . "<br />\n";
  }

$key 是 GET 键,$value$key 的 GET 值。

或者您可以使用替代解决方案来获取 GET 参数数组

$get_parameters = array();
if (isset($_SERVER['QUERY_STRING'])) {
  $pairs = explode('&', $_SERVER['QUERY_STRING']);
  foreach($pairs as $pair) {
    $part = explode('=', $pair);
    $get_parameters[$part[0]] = sizeof($part)>1 ? urldecode($part[1]) : "";
    }
  }

$get_parameters 与 url 解码 $_GET 相同。

【讨论】:

  • 如何在不指定 'id' 的情况下获取所有 $_GET ?以便我可以自动读取所有 $_GET 请求?
  • $get_parameters = array(); if (isset($_SERVER['QUERY_STRING'])) { $pairs = explode('&amp;', $_SERVER['QUERY_STRING']); foreach($pairs as $pair) { $part = explode('=', $pair); $get_parameters[$part[0]] = urldecode($part[1]); } } 警告!在获得一些未定义的偏移量之前,您必须测试 if (count($part) > 1)。
【解决方案2】:

在创建 url 时使用 urlencode 对其进行编码

$val=urlencode('http://google.com/?var=234&key=234')

<a href="http://localhost/test.php?id=<?php echo $val ?>">Click here</a>

在获取解码时使用urldecode

【讨论】:

    【解决方案3】:

    您可能必须在字符串“http://google.com/?var=234&key=234”上使用urlencode

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,最终使用了parse_urlparse_str,只要参数中的 URL 正确 url 编码(它绝对应该)允许您访问实际的所有参数URL,以及查询参数中编码后的URL的参数,像这样:

      $get_url = "http://google.com/?var=234&key=234";
      $my_url = "http://localhost/test.php?id=" . urlencode($get_url);
      
      function so_5645412_url_params($url) {
          $url_comps = parse_url($url);
          $query = $url_comps['query'];
      
          $args = array();
          parse_str($query, $args);
      
          return $args;
      }
      
      $my_url_args = so_5645412_url_params($my_url); // Array ( [id] => http://google.com/?var=234&key=234 )
      $get_url_args = so_5645412_url_params($my_url_args['id']); // Array ( [var] => 234, [key] => 234 )
      

      【讨论】:

        【解决方案5】:

        你使用坏人像?和 & 等等……

        将其编辑为新代码

        查看此链接

        你也可以使用 urlencode

        $val=urlencode('http://google.com/?var=234&key=234')
        

        【讨论】:

          【解决方案6】:

          正确的php方式是使用parse_url()

          http://php.net/manual/en/function.parse-url.php
          

          (来自 php 手册)

          此函数解析一个 URL 并返回一个关联数组,其中包含该 URL 的任何各种组件。

          这个函数不是为了验证给定的 URL,它只是把它分解成上面列出的部分。部分 URL 也被接受,parse_url() 会尽力正确解析它们。

          【讨论】:

            【解决方案7】:
            if (isset($_SERVER['HTTPS'])){
                echo "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]";
            }else{
                echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]";
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-27
              • 1970-01-01
              • 1970-01-01
              • 2017-02-22
              • 2011-01-15
              相关资源
              最近更新 更多