2011-01-24 14 views
13

Gli utenti possono inserire URL utilizzando un modulo HTML sul mio sito Web, in modo che possano inserire qualcosa come questo: http://www.example.com?test=123&random=abc, può essere qualsiasi cosa. Ho bisogno di estrarre il valore di un determinato parametro di query, in questo caso 'test' (il valore 123). C'è un modo per fare questo?Come estrarre i parametri di query da una stringa URL in PHP?

+4

possibile duplicato del [espressioni regolari per analizzare la stringa di query] (http://stackoverflow.com/questions/4499538/regular-expression-to-parse-query-string) – Gordon

+0

Infatti, un duplicato, tuttavia la soluzione parse_url porta a un nuovo problema, guarda il mio commento all'utente576875 di seguito. –

+1

potresti estrarre la stringa partendo da '?' Con 'strstr' o' explode' qualcosa e poi passare a 'parse_str' – Gordon

risposta

43

È possibile utilizzare parse_url e parse_str come questo:

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

parse_url permette di dividere un URL in diverse parti (schema, host, il percorso, interrogare, ecc); qui lo usiamo per ottenere solo la query (test=123&random=abc). Quindi possiamo analizzare la query con parse_str.

+0

Sembra che parse_url lanci un errore PHP quando si usa alcuni URL, controlla questo commento su php.net: http://www.php.net/manual/en/function.parse-url.php#96433 –

+1

Sì, sembra che non funzioni sugli URL senza un ' componente host'. Funzionerà con URL validi come HTTP. – arnaud576875

+0

Quindi, c'è un altro modo per farlo? –

2

Avevo bisogno di controllare un url che fosse relativo per il nostro sistema quindi non potevo usare parse_str. Per chi ne ha bisogno:

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

solo per curiosità, ma come mai il tuo sistema non supporta una funzione nativa di PHP? – Vallentin

+0

@Vallentin - 'parse_str()' è stato introdotto in PHP 4 ... forse (ma è molto improbabile) aveva una versione precedente di PHP –

0

il nome dell'host è facoltativo ma è richiesto almeno il punto interrogativo al l'inizio della stringa di parametri:

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

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

print_r ($params);