クエリストリングというのは、ほうぼうのWEBサービスでよく見かける、URLの後ろについた情報を持った文字列です。たとえば、youtubeで動画の検索をするとき、URLの後ろに ?search_query=検索文字列 として、URLにユーザ検索の内容をつけて遷移後のページに渡しています。
このクエリストリングは、search_queryのような普遍的な語でなくても、勝手な語を選んでつけることができます。そもそも、HTMLでフォームを作って送信方法にGETを選ぶと、input要素のユーザが設定したname属性がストリングになっていますね。またinput要素が複数の場合は、&で結ばれています。これもクエリストリングの特徴です。
さて、このクエリストリングをプログラム側でキー値と値の組で取得するにはどうすればよいでしょうか。
PHPでクエリストリング
PHPの場合、大抵の文字列操作は標準の関数として装備されています。本当に。自分で作る前にまず探してみると、大抵便利なのがあります。再発明した車輪はゴミの日にそっと出しましょう。
1.URL文字列からクエリストリングを取り出す場合 //このようなURLがあったとき $url = "http://akisi.tabiyaku.net/index.php?query1=値1&query2=値2"; //クエリ部分を抽出する関数 $query = parse_url($url,PHP_URL_QUERY); //$queryは"query1=値1&query2=値2" 2.現在のページのURLからクエリストリングを取得する場合 $query = urldecode($_SERVER["QUERY_STRING"]); //urldecodeで、%E3みたいなコードになっているのをデコードする 3.取得したクエリストリングをキーと値の組に parse_str($query,$arr); //$arr["query1"]は値1 //$arr["query2"]は値2 |
3で$arrを指定しなければ、通常の変数($query1,$query2)にそれぞれの値が入ります。
JavaScriptでクエリストリング
JavaScriptの場合には、車輪の開発者になる余地が大いにあります。何故PHPのような標準でクエリストリングを扱う関数が無いのでしょう?簡単な話です。JavaScriptは未来の言語だからです。未来の車には、車輪など必要ありません!
1.URL文字列からクエリストリングを取り出す場合 //このようなURLがあったとき var url = "http://akisi.tabiyaku.net/index.php?query1=値1&query2=値2"; //クエリ部分を抽出する(処理的には、?を探して以降の文字列をとる) var query = url.slice(url.indexOf("?")+1); //queryは"query1=値1&query2=値2" 2.現在のページのURLからクエリストリングを取得する場合 var query = decodeURI(location.search); //decodeURIで、%E3みたいなコードになっているのをデコードする //ただし、先頭に?を含むところがPHPと異なるので、?なしで取得する場合 var query = decodeURI(location.search).substring(1); 3.取得したクエリストリングをキーと値の組に var arr = new Array(); var qarr = query.split("&"); for(i in qarr){ arr[qarr[i].substr(0,qarr[i].indexOf("="))] = qarr[i].substr(qarr[i].indexOf("=")+1); } //arr["query1"]は値1 //arr["query2"]は値2 |
こういった具合です。
実はJavaScript自体の関数ラインナップはPHPより劣るものの、PHPと同様の充実度を誇るのがjQueryです。確実に世界のどこぞの誰かが、あなたより先に車輪を開発してプラグインにしています。たとえばクエリストリングの評価ならば、jquery.toObject.jsこちらを使えばよろしいでしょう。こんな何某のWEB制作日記とか言う場末ブログのブックマークは、今すぐゴミ箱に放り込みましょう。