- ベストアンサー
QUERY_STRINGを連想配列に入れたい
よろしくお願いします。 $_SERVER['QUERY_STRING']の値 q1=abc&q2=def&q3=ghi を連想配列に入れたいと思います。 $array = array("q1"=>"abc","q2"=>"def","q3"=>"ghi"); どのようにしたらQUERY_STRINGの値を連想配列に入れられますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$_SERVER['HTTP_REFERER']が対象ならば、以下で、$query_hashに、$_GETと同様のurldecode済みデータがハッシュ配列として得られます。 $url_hash = parse_url( $_SERVER['HTTP_REFERER'] ); if( array_key_exists( 'query', $url_hash ) and strlen($url_hash['query'])>0 ){ parse_str( $url_hash['query'], $query_hash); } // あとは、$url_hash['host'] によって切り分けて検索キー取り出しをすればよいと思います。 $word = ''; if( preg_match ("/\.google\./", $url_hash['host']) ) { $word = $query_hash['q']; } elseif( preg_match ("/\.yahoo\./", $url_hash['host']) ) { $word = $query_hash['p']; } elseif( preg_match ("/\.goo\.ne\.jp/", $url_hash['host']) ) { $word = $query_hash['MT']; }
その他の回答 (2)
- h_0
- ベストアンサー率30% (7/23)
PHPマニュアルの urldecode の項に下記の例があります。 <?php $a = explode('&', $QUERY_STRING); <--- $_SERVER['QUERY_STRING'] でも同じ $i = 0; while ($i < count($a)) { $b = split('=', $a[$i]); echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])), ' is ', htmlspecialchars(urldecode($b[1])), "<br />\n"; $i++; } ?> あとは、連想配列には入りませんが、マニュアルの parse_str の項も見ると参考になるかもしれませんよ。
補足
回答ありがとうございます。 urldecodeの欄にあるのですね。splitとか explodeを見ていたのですが適切なものがなく、困っていました。
- yambejp
- ベストアンサー率51% (3827/7415)
普通に考えたら$_GETを受ければいいのでは? <?PHP $array=$_GET; print_r($array); ?> QUERY_STRINGの値を厳密に評価するならこんな感じですかねぇ <?PHP $str=$_SERVER['QUERY_STRING']; preg_match_all("/&*([^=]+)=([^&]*)/",$str,$matches); if(is_array($matches[1])) foreach($matches[1] as $key=>$val){ $array[$val] = $matches[2][$key]; } print_r($array); ?>
補足
回答ありがとうございます。 $_GETでいいのでは、とのことですが、厳密にはやろうとしたことがちょっと違っていて あるサイトに <script type="text/javascript" src="http://hoge.com/abc.php" charset="shift-jis"></script> のタグを貼り付けて、http://hoge.com/abc.php を呼び出す。 abc.phpは検索エンジンからのREFERERがあれば、以下の処理を実行。 検索エンジン以外は無視。 abc.phpは、 <?php $ref = $_SERVER['HTTP_REFERER']; //?以降を取得 if(isset($ref)){ $ref = strstr($ref,"?"); $ref = str_replace("?","",$ref); } preg_match_all("/&*([^=]+)=([^&]*)/",$ref,$matches); if(is_array($matches[1])){ foreach($matches[1] as $key=>$val){ $array[$val] = $matches[2][$key]; } } print_r($array); ?> とやって、検索エンジンからどのようなキーワードできているか集計しようとしました。 javascriptで他サーバーを呼び出した場合、$_SERVER['QUERY_STRING']が空になってしまうので HTTP_REFERERを使った次第です。 ただ、説明がややこしくなってしまうので、質問のような文面になりました。
お礼
回答ありがとうございました。ヤフーとgooではうまくいきました。 一定の成果が得られたのですが、グーグルで新しい問題が発生し、困っています。 http://okwave.jp/qa3211836.html もし、お時間がありましたらご教授いただけると幸いです。