SlimStatの日本語対応


はじめに。
作成日:2006/12/27
更新日:2007/08/07
MODxのアクセス解析に使えるSlimStatですが、普通に設定しただけだと一部正常に動いてくれません。ドメイン(Referring Domain)がうまく取れていなかったり、検索文字(Search String)のところに日本語があった場合、文字化けしてすべて「???」になってしまったりします。それじゃなんとなく困るって事で、うちではこんな感じで解決させています。

  • MODx本体のソースをちょっといじる。
  • SlimStatのソースもちょっといじる。
MODx本体のソースをちょっといじる。
!注意!
どうやらMODxのバージョン0.9.5からいじらなくてもよくなったみたいです。
なのでバージョンが0.9.5以降の場合はMODxのソースをいじる必要はありません。

MODxは受け取ったHTTP_REFERERの値に対して、不正な文字列が紛れ込まないように最初に怪しい文字をはじくコードが入っています。ただ、このはじきっぷりが激しいのでデータがSlimStatに渡る前におかしくなります。とりあえず、必要最低限の文字をはじくように変更。

(WebトップDir)/index.phpの54行目付近、
$_SERVER[$outside] = isset($_SERVER[$outside]) ? preg_replace("/[^A-Za-z0-9_\-\,\.\/\s]/", "", $_SERVER[$outside]): '';
をこんな感じに変更(preg_replaceの対象文字が増えてます)。
$_SERVER[$outside] = isset($_SERVER[$outside]) ? preg_replace("/[^A-Za-z0-9_\-\,\.\/\s\?=%&:]/", "", $_SERVER[$outside]): '';
これで、HTTP_REFERERの中身を壊さずにSlimStatに渡せるようになります。ただ、まだ検索文字(Search String)のところでうまく日本語が表示されません。これはSlimStatのソースをいじります。
SlimStatのソースをちょっといじる。
検索文字(Search String)の日本語が文字化けするのはSlimStatのファイルをいじってなおします。

(WebトップDir)/assets/plugins/slimstat/inc.stats.phpの188行付近。
$searchterms = trim( stripslashes( utf8_decode( $q[ $sniff[1] ] ) ) );
コレを次のように変更します。
$searchterms = trim( stripslashes( mb_convert_encoding($q[ $sniff[1] ],"UTF-8","auto") ) );
うちの環境では文字コードがUTFなのUTF-8だけど、EUCな人はEUC-JPとかって書けばいいのかな。多分。
これでいいのかどうかはちょっと自信ないけど、今のところ問題ないです。

[2007/8/7追記]
ソースを修正する部分、もうちょっとありました。
上記の修正はアクセスログを取り込む部分の修正で、以下はアクセス解析を表示する部分の修正です。

(WebトップDir)/assets/plugins/slimstat/_summary.phpの299行付近。
$str .= SlimStat::truncate( utf8_encode( $display_value ), $_truncate - SlimStat::strlen( $config->i18n->when ) )."";
コレを次のように変更します。
$str .= SlimStat::truncate( mb_convert_encoding($display_value,"UTF-8","auto") , $_truncate - SlimStat::strlen( $config->i18n->when ) )."";

(WebトップDir)/assets/plugins/slimstat/_details.phpの663行付近。
$str .= utf8_encode( SlimStat::truncate( $display_value, $_truncate ) );
コレを次のように変更します。
$str .= mb_convert_encoding( SlimStat::truncate( $display_value, $_truncate ),"UTF-8","auto" );
で、大丈夫かな…。
トラックバック
TrackbackURL:http://ayd.jp/p_tb.html?tb_id=42

トラックバックはありません。