2011-01-24 18 views
13

ユーザーはウェブサイトのHTMLフォームを使用してURLを入力できるため、次のように入力することができます。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

+0

確かに、重複していますが、parse_urlソリューションは新しい問題につながります。下のuser576875への私のコメントを見てください。 –

+1

'?'で始まる文字列を 'strstr'または' explode'で何かを取り出して 'parse_str'に渡すことができます – Gordon

答えて

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でクエリを解析できます。

+0

parse_urlがPHPエラーを投げる特定のURLは、このコメントをphp.netでチェックアウトしてください:http://www.php.net/manual/en/function.parse-url.php#96433 –

+1

はい、それは 'ホスト構成要素。これは有効なHTTPのようなURLで動作します。 – arnaud576875

+0

これを行うための他の方法はありますか? –

2

parse_strを使用できないように、私たちのシステムに相対的なURLをチェックする必要がありました。それを必要とする人のため:

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

ですが、あなたのシステムはどのようにネイティブPHP関数をサポートしていませんか? – Vallentin

+0

@Vallentin - 'parse_str()'はPHP 4で導入されました。多分、PHPの以前のバージョンを持っていた可能性があります。 –

0

ホスト名は省略可能ですが、パラメータ文字列の始まりで、少なくとも疑問符が必要です:[クエリ文字列を解析する正規表現]の

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

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

print_r ($params); 
関連する問題