2011-01-24 15 views
13

Kullanıcılar web sitemde bir HTML formu kullanarak URL'leri girebilir, böylece böyle bir şeye girebilirler: http://www.example.com?test=123&random=abc, herhangi bir şey olabilir. Belirli bir sorgu parametresinin değerini, bu durumda 'test' (123 değeri) almam gerekir. Bunu yapmanın bir yolu var mı?PHP'de bir URL dizisinden sorgu parametrelerini nasıl alırım?

+4

([sorgu dizesini ayrıştırmak için Düzenli İfade] olası yinelenen http://stackoverflow.com/questions/4499538/regular-expression-to-parse-query-string) – Gordon

+0

Aslında, bir yinelenen, ancak parse_url çözümü yeni bir soruna yol açıyor, yorumumu aşağıdan kullanıcı576875'e bakın. –

+1

'strstr' veya' explode' birşey ile başlayan dizgeyi ayıklayabilir ve sonra 'parse_str' – Gordon

cevap

43

Böyle parse_url ve parse_str kullanabilirsiniz:

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

parse_url farklı bölgelerinde (şema, konak, yol, sorguda, vs) bir URL split sağlar; Burada sadece sorguyu almak için kullanıyoruz (test=123&random=abc). Sonra sorguyu parse_str ile ayrıştırabiliriz.

+0

Parse_url kullanırken PHP hatası atar gibi görünüyor Belli URL'ler, bu yorumu php.net adresinden öğrenebilirsiniz: http://www.php.net/manual/en/function.parse-url.php#96433 –

+1

Evet, öyle görünüyor ki, ana bilgisayar bileşeni. Bu geçerli HTTP benzeri URL'lerle çalışacaktır. – arnaud576875

+0

Peki, bunu yapmak için başka bir yolu var mı? –

2

Sistemimiz için göreli olan bir url'yi kontrol etmem gerektiğinden, parse_str kullanamadım. Herkes kimin ihtiyacı:

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

sadece meraktan yoksun, ama sisteminiz yerli bir PHP fonksiyonunu nasıl desteklemiyor? – Vallentin

+0

@Vallentin - 'parse_str()' PHP 4'te tanıtıldı ... belki de (ama bu çok doğaçlamadır) PHP'nin daha eski bir sürümü vardı –

0

hostname isteğe bağlıdır ancak parametre string başlamak en azından soru işareti gereklidir:

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

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

print_r ($params); 
İlgili konular