リファラーのデータ送信について
こちらの質問(http://okwave.jp/qa3205563.html)で一定の解決を見たのですが、新たな問題が発生してしまったので教えてください。
sample.htmlへの記述
<script type="text/javascript">
var ref = document.referrer ;
document.write("<script type=\"text/javascript\" src=\"http://hoge.com.info.php?ref="+ref+"\"></script>");
</script>
で、refを送信したのですが、
受け取ったrefが、googleだと、
「http://www.google.co.jp/search?hl=ja」になってしまい、&で区切られている以降のデータ(つまり「q」)が取得できません。
別質問(http://okwave.jp/qa3200959.html)で、
hrm_mmmさんの回答=======================================
$_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'];
}
====================ここまで============================
こんなんでやればいいよ。と教えていただいたのですが、グーグルから送られたref自体にqが入っていません。
というか、?以降の1番目のクエリーしか入ってきません。
ヤフーなら ?p=~でOK
gooなら ?MT=~でOK
google は hl=jaが一番最初にくるので、qがとれません。
なぜ、送信されてくるreferrerに2番目以降のパラメータがついてこないのでしょうか。。。
ちなみにsample.htmlで document.write(document.referrer)をやるとちゃんと全て表示されます。
お礼
http://time3.sakura.ne.jp/sub/cgi/page3.html 窓を細くして見ていただくと縦に並びます。 やっと出来たようです・・・・・・(^^) >html#01のアンカー部分#01が受け渡せていません。 #01の「#」がperlの特殊記号に判定されて認識されなかったようです。 それで「01」部分だけ受け渡すようにしたら、上手くいったようです。 JavaScriptの記述部分は参考サイトからコピペしたものですので 半分ほどしか意味はわかっていませんが、まあいいです・・・(^^ゞ 前回の質問に続き回答して頂き有り難うございました・・・m(_ _)m カンシャ!
補足
回答有り難うございます。 データを受けるCGI側は次の通りです。 use CGI; my $q = CGI->new(); my $url = $q->url; print "<p>url:$url</p>\n"; if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); } else { $alldata = $ENV{'QUERY_STRING'}; } print "<p>変数:$alldata</p>\n"; print "<p>リファラ:$ENV{'HTTP_REFERER'} \n"; 送り側は、リンク貼っておきます。 http://time3.sakura.ne.jp/sub/cgi/page1.html html#01のアンカー部分#01が受け渡せていません。 窓を細くして見ていただくと縦に並びます。 form渡しは、送信ボタンを押さないと渡せないようです。 そこで流れが一旦止まってしまいますので考慮外です。 送信ボタンを押さなくても渡せるのであればいいのですが。