2011-01-24 41 views
13

Người dùng có thể nhập URL bằng biểu mẫu HTML trên trang web của tôi, để họ có thể nhập một cái gì đó như thế này: http://www.example.com?test=123&random=abc, nó có thể là bất cứ điều gì. Tôi cần trích xuất giá trị của một tham số truy vấn nhất định, trong trường hợp này là 'test' (giá trị 123). Có cách nào để làm việc này không?Làm cách nào để trích xuất tham số truy vấn từ chuỗi URL trong PHP?

+4

thể trùng lặp của [biểu thức thông thường để phân tích chuỗi truy vấn] (http://stackoverflow.com/questions/4499538/regular-expression-to-parse-query-string) – Gordon

+0

Thật vậy, một bản sao, tuy nhiên các giải pháp parse_url dẫn đến một vấn đề mới, nhìn vào bình luận của tôi để user576875 dưới đây. –

+1

bạn có thể trích xuất chuỗi bắt đầu từ '?' Với 'strstr' hoặc' phát nổ' một cái gì đó và sau đó chuyển nó tới 'parse_str' – Gordon

Trả lời

43

Bạn có thể sử dụng parse_urlparse_str như thế này:

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

parse_url cho phép chia nhỏ một URL trong các phần khác nhau (chương trình, chủ nhà, con đường, truy vấn, vv); ở đây chúng tôi sử dụng nó để chỉ nhận được truy vấn (test=123&random=abc). Sau đó, chúng tôi có thể phân tích cú pháp truy vấn với parse_str.

+0

Dường như parse_url ném một lỗi PHP khi sử dụng một số URL nhất định, hãy xem nhận xét này trên php.net: http://www.php.net/manual/en/function.parse-url.php#96433 –

+1

Có, có vẻ như nó không hoạt động trên các URL không có ' thành phần host'. Điều này sẽ hoạt động với các URL giống HTTP hợp lệ. – arnaud576875

+0

Vì vậy, có cách nào khác để làm điều này không? –

2

Tôi cần kiểm tra url tương đối cho hệ thống của mình để tôi không thể sử dụng parse_str. Đối với bất cứ ai cần nó:

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

chỉ vì tò mò, nhưng làm sao hệ thống của bạn không hỗ trợ chức năng PHP gốc? – Vallentin

+0

@Vallentin - 'parse_str()' đã được giới thiệu trong PHP 4 ... có thể (nhưng nó là nhiều improbabile) ông đã có một phiên bản trước của PHP –

0

tên máy là không bắt buộc nhưng cần ít nhất là dấu hỏi tại bắt đầu của chuỗi tham số:

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

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

print_r ($params); 
Các vấn đề liên quan