2011-01-24 129 views
13

用户可以在我的网站上使用HTML表单输入网址,因此他们可能会输入如下内容:http://www.example.com?test=123&random=abc,它可以是任何东西。我需要提取某个查询参数的值,在这种情况下是'test'(值为123)。有没有办法做到这一点?如何从PHP中的URL字符串提取查询参数?

+4

的可能重复[正则表达式解析查询字符串( http://stackoverflow.com/questions/4499538/regular-expression-to-parse-query-string) – Gordon 2011-01-24 16:23:56

+0

事实上,一个重复的,但是parse_url解决方案导致一个新的问题,看看我的评论user576875下面。 – 2011-01-24 16:28:57

+1

你可以用`strstr`或`explode`提取字符串```,然后把它传递给`parse_str` – Gordon 2011-01-24 16:40:25

回答

43

您可以使用parse_urlparse_str这样的:

$query = parse_url('http://www.example.com?test=123&random=abc', PHP_URL_QUERY); 
parse_str($query, $params); 
$test = $params['test']; 

parse_url允许分割在不同的部位(方案,主机,路径,查询等)的URL;这里我们用它来得到只有查询(test=123&random=abc)。然后我们可以用parse_str解析查询。

2

我需要检查一个相对于我们的系统的URL,所以我不能使用parse_str。对于任何人谁需要它:

$urlParts = null; 
preg_match_all("~[\?&]([^&]+)=([^&]+)~", $url, $urlParts); 
0

主机名是可选的,但至少需要的问号开始参数字符串:

$inputString = '?test=123&random=abc&usersList[]=1&usersList[]=2' ; 

parse_str (parse_url ($inputString , PHP_URL_QUERY) , $params); 

print_r ($params); 
相关问题