二〇〇五年 睦月 十六日 日曜日
アクセスログの referer を見る
アクセスログの referer には、ページを見に来てくれた人が、どのページから飛んできたかが記録されている。(ただし、ブラウザによっては、referer を返さなかったり、任意の referer を返すように設定できるので、信用はできない。)
それで、このブログのアクセスログを見ていたところ、Google から来る人が結構いらっしゃる。そのときは、referer の中に検索した文字列も含まれているのだが、日本語は URL エンコードされていて、そのままではなんのことだか分からない。そうなると、検索文字列を知りたくなるのが人情というもので、エンコードされた referer を受け取って、デコードしてから文字コードを EUC に変換するサブルーチンを作ってみた。
なお、Encode モジュールは perl 5.8 から標準装備になった。
use Encode;
use Encode::Guess qw(euc-jp shiftjis 7bit-jis);
my $raw_referer = shift @_ or return 'n/a';
my $referer = $raw_referer;
$referer =~ tr/+/ /;
$referer =~ s/%([a-f\d]{2})/pack 'H2', $1/egi;
my $decorder = guess_encoding $referer;
return $raw_referer unless ref($decorder);
encode 'euc-jp', $decorder->decode($referer);

コメントを書くには JavaScript が必要です。