• ベストアンサー

アクセス解析CGI、"?"以下を表示させず、1つにまとめる方法

http://www.rescue.ne.jp/ ここのSSIアクセス解析を使用しています。 http://www.rescue.ne.jp/cgi/webaxs/sample/webaxs.cgi シンプルでいいのですが、1つだけ難点が… 検索サイトなどで、?以降に検索語句が入っているものってありますよね。それが必要ないんです。 どのサイトから来たかだけがわかれば良いので、?以下を表示させず、1つにまとめてほしいのですが… たとえば、ここ教えてgooを検索すると、 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%E6%95%99%E3%81%88%E3%81%A6+goo となります。 これを、「http://www.google.co.jp/search」だけにして集計してほしいんです。 どうしたらこのように出来ますか?集計CGIである「webaxs.pl」を改造する必要があると思うのですが… よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

集計する前に、?が含むURLから?以降を削ってあげる処理を入れれば良いです。webaxs.plに追記するひつようはあろかと思います。plと書いてあるから、perlですよね?(って勝手に決め付けちゃいます) <必要な記述> 仮にURLが入る変数を$abcとすると。 次の1行を入れれば、OK。 $abc =~ s/\?.*//; これは、文字列置換の書き方です。 =~ は、左辺の変数を対象に、右辺の処理を施した結果を、右辺に代入しなさいということ。 s/は、これから置換するぞ!ということ。 \?.* は、?(特殊文字なので、前に\を付けてあげます)を含む、それ以降の文字列すべてを対象にします。ということ。 その後ろの//は、置き換える文字列ですが、何も入っていないですよね?これは、結局、置換対象の文字を削るということ。 <サンプル> $abc="http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%E6%95%99%E3%81%88%E3%81%A6+goo"; print $abc."\n"; $abc =~ s/\?.*//; print $abc."\n";

master-3rd
質問者

お礼

返答ありがとうございます。 しかも、詳細な説明まで入れていただき、申し訳ありません。 無事動かすことが出来ましたし、何がどうなっているかも理解できました。 本当にありがとうございます。

関連するQ&A