URLのクエリはLocationオブジェクトのsearchプロパティに、すべてのパラメータが1つの文字列として連結されて格納されています。ここではその文字列を分割し、パラメータ名をキーとした連想配列としてGETパラメータを取得する方法を紹介します。
function GetQueryString() { var result = {}; if( 1 < window.location.search.length ) { // 最初の1文字 (?記号) を除いた文字列を取得する var query = window.location.search.substring( 1 ); // クエリの区切り記号 (&) で文字列を配列に分割する var parameters = query.split( '&' ); for( var i = 0; i < parameters.length; i++ ) { // パラメータ名とパラメータ値に分割する var element = parameters[ i ].split( '=' ); var paramName = decodeURIComponent( element[ 0 ] ); var paramValue = decodeURIComponent( element[ 1 ] ); // パラメータ名をキーとして連想配列に追加する result[ paramName ] = paramValue; } } return result; }
たとえばクエリが?a=1&b=c%26d
だとすると、この関数からは{ a="1", b="c&d" }
が返されます。
Prototype.jsを使用するならば、Stringの拡張メソッドであるtoQueryParams()で、
var query = window.location.search.toQueryParams();
と記述するだけです。このメソッドにより上記の関数と同様の結果が返されます。
form要素からGETでリクエストされたパラメータはURLエンコードされ、そしてスペースは「+」に変換されます。URLエンコードされたパラメータはdecodeURIComponent()でデコードできますが、「+」は別に処理が必要です。たとえばそれは、
string.replace( /\+/g, ' ' );
とすれば置換できます。
以下のフォームで[リクエスト]をクリックすることで、スペースが「+」に変換されることを確認できます。
閲覧中のページへリクエストされます。結果はブラウザのアドレスバー (ロケーションバー) で確認してください。