2011-01-24 128 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); 
相關問題