refererによる文字コードの違い

検索エンジン経由で来たアクセスについては、検索語を即時ツイートするようにしているのだが、EZから来たものだけツイートされない。 それは、ツイートする前にしていた以下の処理が原因だった。

$unescaped = Encode::decode('utf8', $unescaped);


無条件にutf8でデコードしていたのだがEZはshif-tjisを使っている。 というわけでEZのときだけshift-jisでデコードし、それ以外はutf8でデコードするようにした。

ちなみにrefererによる動作を確認するには以下のようなスクリプトを使う。

use LWP::UserAgent;
use strict;
use warnings;

my $url = "http://sample.com/cgi-bin/test.cgi";
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => "$url");

$req->referer("http://ezsch.ezweb.ne.jp/search/?sr=0101&query=aiueo%20%95a%93I");
my $res = $ua->request($req);
if($res->is_success){
    print $res->content;
}else{
    print $res->status_line;
}


bing, yahoo, googleはブラウザから検索すればいいのだがauの携帯がないのでEZの場合はこれを使った。 そこで気付いたのだがezschのquery文字列は短い。これがshift-jisのメリットか。

$req->referer に設定しているのは、実際にアクセスがあったログのHTTP_REFERERである。