在php中,如果我想解析一个URL,例如www.site.com/index.php?foo=bar,我可以使用_POST变量。我可以通过bar
检索_POST['foo']
。
但是,如果我的网址类似www.site.com/index.php?foo&bar
,该怎么办?也就是说,我没有像第一种情况那样作为键值对的参数。如何在php中解析这个?
答案 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']
。