在PHP中解析URL

时间:2014-02-16 11:37:22

标签: php url

在php中,如果我想解析一个URL,例如www.site.com/index.php?foo=bar,我可以使用_POST变量。我可以通过bar检索_POST['foo']

但是,如果我的网址类似www.site.com/index.php?foo&bar,该怎么办?也就是说,我没有像第一种情况那样作为键值对的参数。如何在php中解析这个?

2 个答案:

答案 0 :(得分:2)

使用parse_url

引自php.net:

  

此函数解析URL并返回关联数组   包含URL中存在的任何各种组件。

     

此功能并不意味着验证给定的URL,它只会中断   它列入上面列出的部分。部分网址也被接受,   parse_url()尽力正确解析它们。

然后,使用parse_str函数来解析查询参数部分。

  

解析str,好像它是通过URL传递的查询字符串并设置   当前范围内的变量。   要获取当前的QUERY_STRING,您可以使用变量$ _SERVER ['QUERY_STRING']。另外,您可能需要阅读本节   外部来源的变量。   magic_quotes_gpc设置会影响此函数的输出,因为parse_str()使用与PHP用于填充   $ _GET,$ _POST等变量。

<?php 
  $parts = parse_url('www.site.com/index.php?foo&bar');
  print_r($parts);
  // Array ( [path] => www.site.com/index.php [query] => foo&bar )


  parse_str ($parts['query'], $query);
  print_r($query);
  // Array ( [foo] => [bar] => ) 

 // Alternately you can do this in a single shot like below:
 parse_str(parse_url('www.site.com/index.php?foo&bar', PHP_URL_QUERY));

?>

答案 1 :(得分:1)

请求像

这样的网址是一种误解
http://www.example.com/index.php?foo=bar

会在bar中为您提供$_POST['bar']。 Url参数将填充$_GET。任何应该在$_POST中显示的内容都必须在请求正文中提交。有关详细信息,请参阅How are parameters sent in an HTTP POST request?

有了这个澄清的空URL参数根本不是问题。像

这样的网址
http://www.example.com/index.php?foo&bar

将使用空值填充$_GET['foo']$_GET['bar']